冒泡排序

一直未曾真正理解排序。

这次把我理解的一小部分写下来吧。

冒泡排序有两层循环,第一层是用来计数的,就是第几次冒泡了;每冒泡一次,需要比较的数就少了一个,也就是比较次数少了一次,第二个循环可以理解为循环的次数,内层循环有两种写法,一种是从

就以需要比较n个数为例:

一、
for(int i=0;i<=n-2;i++){
for(int j=0;j<=n-2-i;j++){
      int temp=a[j];
           a[j]=a[j+1];
           a[j+1]=temp;
}
}

二、
for(int i=0;i<=n-2;i++){
for(int j=1;j<=n-1-i;j++){
   int temp=a[j-1];
     a[j-1]=a[j];
     a[j]=temp;
}
}

第二个循环的范围是根据你接下来要写的数组下标有关,如果你用a[j]和[j+1],你可以用第一种;
如果你用a[j]和a[j-1],你可以用第二种。
还有一个问题就是那个<和<=,这个根据自己的习惯写,我个人习惯这种写法。

外循环,讲的是比较的次数;内循环讲的具体的比较,但是具体的比较受外循环比较次数的影响;

总共n个数,就需要进行n-1次比较,[0,n-2]共n-1次比较,对应的内层循环[0,n-1-i].

之前一直对内循环的范围变换有些晕乎乎的,现在一次性记下来。也方便自己以后复习。

最近学了一个不用临时变量交换两值的方法,就用上面的数组

a[j]=a[j]^a[j+1];

a[j+1]=a[j]^a[j+1];

a[j]=a[j]^a[j+1];

其原理是根据异或后的值与其中一个进行异或就会得到另一个。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值