遇到这种情况怎么办,有没有大神教教我啊

#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学习##笔经#
全部评论
同求,有了踹我一脚好不
点赞 回复 分享
发布于 2022-01-16 11:55

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务