C-仅使用两个不起作用的变量交换



我正在编写一个C代码以进行快速排序,但出了点问题。经过一些调试后,我终于发现了我的代码出错的地方。当我更换

     {
a[lp]+=a[ub];
a[ub]=a[lp]-a[ub];
a[lp]=a[lp]-a[ub];
}

  {
tmp=a[lp];
a[lp]=a[ub];
a[ub]=tmp;
}

我的代码开始工作。我很想知道为什么我最初的交换实施不起作用?谁能帮我吗?

    #include<stdio.h>
    #define swap(a,b) (a)=(a)+(b);b=(a)-(b);(a)=(a)-(b);
    int a[]={7,1,5,2,3};
    int partition(int lb,int ub)
    {
    int k,hp,lp;
    k=a[ub];
    lp=lb-1;
    for(hp=lb;hp<ub;hp++)
    {
    if(a[hp]<k)
    {
    lp++;
    int tmp=a[lp];
    a[lp]=a[hp];
    a[hp]=tmp;
    }
    }
    lp++;
    a[lp]+=a[ub];
    a[ub]=a[lp]-a[ub];
    a[lp]=a[lp]-a[ub];
    return lp;
    }
    void quicksort(int lb,int ub)
    {
    if(lb<ub)
    {
    int pos=partition(lb,ub);
    quicksort(lb,pos-1);
    quicksort(pos+1,ub);
    }
    }
    int main()
    {
    quicksort(0,4); 
    int i;
    for(i=0;i<5;i++)printf("%d ",a[i]);
    printf("n");
    return 0;
    }

您需要考虑lp == ub(即。

将其更改为:

if (lp != ub) {
    a[lp]+=a[ub];
    a[ub]=a[lp]-a[ub];
    a[lp]=a[lp]-a[ub];
}

示例:http://ideone.com/as1dgf

最新更新