注册 登录
编程论坛 C语言论坛

快速排序代码,执行后没结果,那个环节出了问题求大佬们指教 感谢

宁缺T 发布于 2019-09-13 09:56, 2543 次点击
#include<stdio.h>
void swap(int *d,int k,int m)
{
    int temp;
    temp=*(d+k);
    *(d+m)=*(d+k);
    *(d+m)=temp;
}
int sort(int *b,int lows,int highs)
{
    //int low,high;
    int middle=b[0];
    if(lows<highs)
    {
        while(lows<highs&&b[highs]>=middle)
            highs--;
        swap(b,highs,lows);
        while(lows<highs&&b[lows]<=middle)
            lows++;
        swap(b,lows,highs);
    }
    return lows;
}
void Quicksort(int a[],int low,int high)
{
    int mid;
    mid=sort(a,low,high);
    Quicksort(a,1,mid-1);
    Quicksort (a,mid+1,9);
}

int main()
{

    int i;
    int a[10]={50,10,90,30,70,40,80,60,20,100};
    Quicksort(a,1,9);


    for(i=0;i<10;i++)
        printf("%2d",a[i]);
    printf("victory");
    return 0;
}
5 回复
#2
八画小子2019-09-13 12:06
Quicksort()函数无限循环了,没有停止条件
#3
沈和2019-09-13 14:13
我以前写的快速排序的算法,给题主贴一下
partition() 函数,相当于题主的sort()函数。
程序代码:

int partition(int A[], int low, int high)
{
    int stored = A[high];
    int i = low - 1;
    for (int j = low; j < high; ++j)
    {
        if (A[j] <= stored)
        {
            i++;
            swap(A, i, j);
        }
    }
    swap(A, i+1, high);
    return i + 1;
}

void quick_sort(int A[], int low, int high)
{
    if (low < high)
    {
        int mid = partition(A, low, high);
        quick_sort(A, low, mid - 1);
        quick_sort(A, mid + 1, high);
    }
}

void swap(int a[], int m, int n)
{
    if (m != n)
    {
        int tmp = a[m];
        a[m] = a[n];
        a[n] = tmp;
    }
}

#4
沈和2019-09-13 14:22
回复 3楼 沈和
在main函数调用的时候,也有一些差别
quick_sort(A, 0, LENGTH - 1); 这是我的调用方式
#5
宁缺T2019-09-13 16:59
大佬们,中秋快乐。我想我知道哪里不对了,谢谢
#6
wmf20142019-09-14 02:35
首先swap函数错,应修改如下:
void swap(int *d,int k,int m)
{
    int temp;
    temp=*(d+k);
    *(d+k)=*(d+m);
    *(d+m)=temp;
}
其次sort函数中 int middle=b[0];应该是 int middle=b[lows];
再次Quicksort递归应该是Quicksort(a,low,mid-1)和Quicksort(a,mid,high)
再再次main函数中的Quicksort调用数组应该从0起,不是1,即Quicksort(a,0,9)
最后sort函数有算法错误,另外还要考虑数据相同或已经有序时会栈溢出的处理。
目前你的代码在调试中出现的是栈溢出错误。

1