首页 新闻 会员 周边

(c)快排函数嵌套调用交换函数出错

0
悬赏园豆:20 [已解决问题] 解决于 2017-07-16 13:57

  我写了一个交换swap函数,和快排quicksort函数,在快排函数中调用交换函数程序时
,程序一直会死在quicksort函数里,感觉是交换错误,求解?
PS:不是递归的问题,我把那段注释了,程序还是死了。

//交换函数
void swap(int *x,int *y)
{
int temp2;
temp2=*x;
*x=*y;
*y=temp2;
}

//快排函数
void quicksort(int *a,int left,int right)
{
int temp; //基准数
int i,j,t; //哨兵i,j,交换数t
//初始化
temp=a[left];
i=left;
j=right;
if(left>right)
return;
while(i!=j)
{
while(itemp)
j--;
while(i<j&&a[i]<temp)
i--;
swap(&a[i],&a[j]);
}
//基准数归位
swap(&temp,&a[i]);
swap(&left,&temp);
quicksort(a,left,i-1);
quicksort(a,i+1,right);

}

bw98的主页 bw98 | 初学一级 | 园豆:177
提问于:2017-07-15 10:28
< >
分享
最佳答案
0
int Partition(int a[], int low, int high)
{
    int x = a[high];//将输入数组的最后一个数作为主元,用它来对数组进行划分
    int i = low - 1;//i是最后一个小于主元的数的下标
    for (int j = low; j < high; j++)//遍历下标由low到high-1的数
    {
        if (a[j] < x)//如果数小于主元的话就将i向前挪动一个位置,并且交换j和i所分别指向的数
        {
            int temp;
            i++;
            temp = a[i];
            a[i] = a[j];
            a[j] = temp;
        }
    }
    //经历上面的循环之后下标为从low到i(包括i)的数就均为小于x的数了,现在将主元和i+1位置上面的数进行交换
    a[high] = a[i + 1];
    a[i + 1] = x;
    return i + 1;
}
void QuickSort(int a[], int low, int high)
{
    if (low < high)
    {
        int q = Partition(a, low, high);
        QuickSort(a, low, q - 1);
        QuickSort(a, q + 1, high);
    }
}
收获园豆:20
fcyh | 小虾三级 |园豆:568 | 2017-07-15 11:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册