gpt4 book ai didi

c - 仅使用两个不起作用的变量进行交换

转载 作者:太空宇宙 更新时间:2023-11-04 02:05:15 25 4
gpt4 key购买 nike

我正在编写用于快速排序的 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

关于c - 仅使用两个不起作用的变量进行交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21472689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com