C中的QuickSort无法正常工作

时间:2015-06-06 18:33:29

标签: c quicksort

我尝试在C中实现QuickSort,但没有得到正确的结果。这是我写的程序。

#include<stdio.h>
int partition(int a[],int low,int high)
{
    int pivot = a[high];
    int temp;
    int i = low-1;
    int j=0;
    for(j=0;j<high-1;j++)
    {
        if(a[j]<=pivot)
        {
            i=i+1;
            temp = a[i];
            a[i] = a[j];
            a[j] = temp;    
        }       
    }
    temp = a[i+1];
    a[i+1] = pivot;
    a[high] = temp;
    return (i+1);   
}

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

main()
{
    int i,n,a[10];
    printf("\nEnter the number of elements in the array : ");
    scanf("%d",&n);
    printf("\nEnter the elements in the array : "); 
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("\nElements in the array before sorting : ");    
    for(i=0;i<n;i++)
    {
        printf (" %d",a[i]);
    }
    quick_sort(a,0,n-1);
    printf("\nElements in the array after sorting : "); 
    for(i=0;i<n;i++)
    {
        printf (" %d",a[i]);
    }
    printf("\n");
}

我输入为0,4,2,7但结果是4,0,7,2。我无法通过此代码找到问题。有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

你的for循环应该是:for(j=low;j<high;j++)

看看Coreman的算法简介,我认为这是直接的。

请参阅http://ideone.com/Ugouy4