快速排序的C程序(递归)

时间:2015-06-12 07:23:28

标签: c recursion quicksort

以下c程序是quicksort递归程序。虽然我根据Cormen的解释编写了这段代码,但它却错误地对输入进行了排序。例如,它将输入3,8,1排序为3,1,8。非常感谢您提前找到错误

#include<stdio.h>
void printa(int a[],int size)
{
    int i;
    printf("\n");
    for(i=0;i<size;i++)
    {
        printf("%d\n",a[i]);
    }
}
void swap(int *a,int *b)
{
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
}
int partition(int a[],int p,int r)
{
    int i,j,x;
    i=p-1;
    x=a[r];
    for(j=p;j<r;j++)
    {
        if(a[j]<=x)
        {
            i=i+1;
            swap(&a[i],&a[j]);
        }
        swap(&a[i+1],&a[r]);
    }
    return i+1;
}
void quicksort(int a[],int p,int r)
{
    if(p<r)
    {
    int q;
    q=partition(a,p,r);
    quicksort(a,p,q);
    quicksort(a,q+1,r);
    }
}
main()
{
    int a[50],i,size;
    printf("enter the size of the array\n");
    scanf("%d",&size);
    printf("enter the elements of the array\n");
    for(i=0;i<size;i++)
    {
        scanf("%d",&a[i]);
    }
    quicksort(a,0,size-1);
    printa(a,size);

}

0 个答案:

没有答案