我想通过快速排序对一个数组进行排序后再进行二分法查找,但是他一直乱码,请问是哪里出了问题呢
#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;
}
想请问一下各位怎样解决这个问题