为什么有时会出现乱码,有时候就不会


#include<stdio.h>
int search(long long 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(long long a[], int low, int high)//定义一个交换函数,交换两个数的位置
{
    long long temp = a[low];
    a[low] = a[high];
    a[high] = temp;
}
int partition(long long a[], int low, int high)//定义一个分边函数,找到一次排序后基准的下标
{
    long long 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(long long a[], int low, int high)
{
    long long point;
    if (low < high)
    {
        point = partition(a, low, high);//找出基准的下标
        Qsort(a, low, point - 1); //从左边递归
        Qsort(a, point + 1, high);//从右边递归
    }
}
int main()
{
    long long a[] = { 24,1,3,50,78,555,66 };//要进行排序的数组
    int key;//要查找的数
    printf("原数组:");
    for (int i = 0; i < 7; i++)
    {
        printf("%lld\t", a[i]);
    }
    printf("\n");
    Qsort(a, 0, 7);//调用函数进行排序
    printf("排序后:");
    for (int i = 0; i < 7; i++)
    {
        printf("%lld\t", a[i]);
    }
    printf("\n");
    printf("请输入要查找的数:");
    scanf_s("%d", &key);
    printf("下标为%d", search(a, sizeof(a) / sizeof(a[0]), key));//若输出的下标为-1则表示要查找的数不在该数组中
    return 0;
}

你的partition函数逻辑有问题啊
首先low和high你没有复制一份,直接改掉了,那你第二次执行while的时候可能一开始low<high就不满足条件了
然而后面你并没有判断,直接执行了交换,这样可能把不应该交换的数据给交换掉了
-=-=-
还有,到底什么是乱码,上图。这么多代码,你让人猜哪里会出问题,那上哪猜去啊。你好歹告诉我们哪个函数会出问题,然后再查

img