遇到这种情况怎么办,有没有大神教教我啊
#include<stdio.h> int search(int a[], int size, int key)//定义一个二分法查找的函数 { int low = 0; int high = size - 1; int index = -1;//若查找失败则返回-1 while (low <= high) { int mid = (low + high) / 2;//找出中间的值进行比较 if (key > a[mid])//如果要找的数比中间值大则要改变low { low = mid + 1; } else if (key < a[mid])//如果要找的数比中间值小则要改变high { high = mid - 1; } else//如果要找的数就是中间值大则将下标赋值给index { index = mid; break;//跳出循环避免出错 } } return index;//查找成功则返回下标,失败则返回-1 } void swap(int a[], int low, int high)//定义一个交换函数,交换两个数的位置 { int temp = a[low]; a[low] = a[high]; a[high] = temp; } int partition(int a[], int low, int high)//定义一个分边函数,找到一次排序后基准的下标 { int point = a[low];//把第一个数当作基准 while (low < high) { while (low < high && a[high] >= point)//从右往左找,找到比基准小的数然后跟基准交换位置 { high--; } swap(a, low, high);//跳出while,说明找到并与基准交换位置 while (low < high && a[low] <= point)//从左往右找,找到比基准大的数然后跟基准交换位置 { low++; } swap(a, low, high);//跳出while,说明找到并与基准交换位置 } return low;//返回基准下标 } void Qsort(int a[], int low, int high) { int point; if (low < high) { point = partition(a, low, high);//找出基准的下标 Qsort(a, low, point - 1); //从左边递归 Qsort(a, point + 1, high);//从右边递归 } } int main() { int a[] = { 24,1,3,50,78,555,66 };//要进行排序的数组 int key;//要查找的数 printf("原数组:"); for (int i = 0; i < 7; i++) { printf("%d\t", a[i]); } printf("\n"); Qsort(a, 0, 7);//调用函数进行排序 printf("排序后:"); for (int i = 0; i < 7; i++) { printf("%d\t", a[i]); } printf("\n"); printf("请输入要查找的数:"); scanf_s("%d", &key); printf("下标为%d", search(a, sizeof(a) / sizeof(a[0]), key));//若输出的下标为-1则表示要查找的数不在该数组中 return 0; }
#C学习##笔经#