数组排序问题求解决

郑州大学物联网实验室 2016-09-21 12:00:11
for( j = 0;j < SIZE;j++ )
{
for( i = 0;i < ( SIZE-1 );i++ )
{
if( a[i] > a[i+1] )
{
hold = a[i];
a[i] = a[i+1];
a[i + 1]=a[i];
}
}
}



中间IF部分为什么不可以改成
a【i】= a【i+1】;
a【i+1】=a【i】 ;

...全文
230 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2016-09-21
  • 打赏
  • 举报
回复
中间应该要是这样吧: hold = a[i]; a[i] = a[i+1]; a[i + 1]=hold;
Morrisss_ 2016-09-21
  • 打赏
  • 举报
回复
=是赋值啊,你直接这样赋值,其中一个变量的值早就没了。你交换值还有用么。
赵4老师 2016-09-21
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0)
char   *p1="1" ,*p2="2" ;
char    c1=1   , c2=2   ;
short   s1=1   , s2=2   ;
int     i1=1   , i2=2   ;
__int64 I1=1i64, I2=2i64;
float   f1=1.0f, f2=2.0f;
double  d1=1.0 , d2=2.0 ;
void main() {
    SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);
    SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);
    SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);
    SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);
    SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);
    SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);
    SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);

    SWAP(c1,c1);
    printf("%d\n",c1);
}
//char *         2,       1
//char           2,       1
//short          2,       1
//int            2,       1
//__int64     2,    1
//float          2,       1
//double        2,      1
//2
码路边的发糕 2016-09-21
  • 打赏
  • 举报
回复
a[i]^=a[i+1]; a[i+1]^=a[i]; a[i]^=a[i+1]; 就可以了,异或交换2个变量,无需第三个变量
  • 打赏
  • 举报
回复
你两个手都放满了东西,现在你想换两个手拿的东西,你不把其中一个手的东西放到别的地方能交换吗?
小灸舞 版主 2016-09-21
  • 打赏
  • 举报
回复

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧