王小二° 发表于 2023-11-21 13:48:40

还有这个

二分查找法。按照从小到大的顺序,输入n个整数并存入数组a中,然后在数组a中查找给定的x。如果数组a中的元素与x的值相同,输出相应的下标(下标从0开始);如果没有找到,输出“Not Found”。如果输入的n个整数没有按照从小到大的顺序排列,或者出现了相同的数,则输出“Invalid Value”。


#include <stdio.h>

# define MAXN 10

int main()

{

int found, i, left, mid, n, right, sorted, x;

int a;



scanf("%d %d", &n, &x);

for(i = 0; i < n; i++){

    scanf("%d", &a);

}

   

sorted = 1;

for(i = 1; i < n; i++){

    if【1】{

               【2】

      break;

    }

}

if(sorted == 0){

    printf("Invalid Value\n");

}else{

    found = 0;

   【3】

    while(left <= right){

                       【4】

      if (x == a){

                 【5】

      break;

      }else if (x < a){

                  【6】

      }else{

                 【7】

      }

    }

    if(found != 0){

      printf("%d\n",mid);

    }

    else{

      printf( "Not Found\n");

    }

}

   

return 0;

}
也讲一下,谢谢

isdkz 发表于 2023-11-21 13:48:41

#include <stdio.h>

# define MAXN 10

int main()
{
    int found, i, left, mid, n, right, sorted, x;
    int a;

    scanf("%d %d", &n, &x);
    for(i = 0; i < n; i++){
      scanf("%d", &a[ i]);
    }

    sorted = 1;
    for(i = 1; i < n; i++){
      if(a[ i] < a){
            sorted = 0;
            break;
      }
    }

    if(sorted == 0){
      printf("Invalid Value\n");
    }else{
      found = 0;
      left = 0;
      right = n - 1;
      while(left <= right){
            mid = (left + right) / 2;
            if (x == a){
                found = 1;
                break;
            }else if (x < a){
                right = mid - 1;
            }else{
                left = mid + 1;
            }
      }
      if(found != 0){
            printf("%d\n",mid);
      }
      else{
            printf( "Not Found\n");
      }
    }   
    return 0;
}


这是一个使用二分查找法在有序数组中查找指定元素的程序。首先,它会检查输入的n个整数是否按照从小到大的顺序排列,如果没有则输出"Invalid Value"。如果数组是有序的,则使用二分查找法在数组中查找给定的x。如果找到了,就输出相应的下标;如果没有找到,就输出"Not Found"。
页: [1]
查看完整版本: 还有这个