在c中实现quicksort

时间:2013-09-05 18:23:10

标签: c quicksort

void qkSort (int *arr,int size)
{
    if (size>1)
    {
        int p = partition(arr,size);
    qkSort(arr,p);
    qkSort(arr+p+1,size-(p-1));
    }
    return;
}

int partition(int *arr,int size)
{
    int i,j,pivot,temp;
    pivot = size-1;
    for(i=0,j=-1;i<size-1;++i)
    {   
        if (arr[i]<arr[pivot])
        {
             ++j;
             if(i!=j)
             {
                 temp = arr[i];
                 arr[i] = arr[j];
                 arr[j] = temp;
             }
        }
    }

    temp = arr[pivot];
    arr[pivot] = arr[j+1];
    arr[j+1] = temp;

    pivot = j+1;

    return pivot;
}

程序挂断了。通过gdb监视变量表明第二个递归调用没有正确传递其参数。请帮忙!提前谢谢!

2 个答案:

答案 0 :(得分:2)

请参阅:http://p2p.wrox.com/visual-c/66347-quick-sort-c-code.html

此示例可帮助您入门。

答案 1 :(得分:0)

你计算第二个数组的大小是错误的。

qkSort(arr+p+1,size-(p-1));

这样可行。

qkSort(arr+p+1,(size-p)-1);