【重新上本科】冒泡排序

关于冒泡排序,我就记住两点:1. 需要双层循环,循环下标要搞对;2. 大的元素要“沉底”或者小的元素要“浮上来”(按照从小到大排列),都行。


刚刚自己写了一遍,发现:(1)其实1和2是相联系的,就是说内层循环遍历的方向、外层循环下标移动方向,与是“沉底”还是“浮上来”有关;(2)排序最终结果的排列方向(从小到大或者从大到小)与当前比较的比较条件有关。


这段代码写的是:内层循环从上到下正向遍历,大元素沉底,外层循环下标(表示循环的覆盖范围)逐渐上移。代码如下:

void BubbleSort (int Array[], int iNum)   // iNum是数组Array的元素数目

{

if (iNum <= 1)                    // 防御性代码

return;

for (int i=0; i<iNum-1; i++)                 // 外层循环,控制内层循环的遍历范围。随着内层循环每次遍历,外层循环自下向上逐渐缩小范围(最大的元素都沉底了,就不用遍历比较了)

for (int j=0; j<iNum-i-1; j++)            // 内层循环,控制遍历方向。这里是从上到下遍历,结合下面if条件判断,使得每次遍历,最大的元素“沉底”;如果这个遍历的方向是从下到上,且下面if条件不变,则每次遍历的结果是使得最小的元素“冒泡”

{

if (Array[j] > Array[j+1])      // 控制排序结果的“方向”:数组上面是数值小的元素,下面是数值大的元素

{

int iTemp = Array[j];

Array[j] = Array[j+1];

Array[j+1] = iTemp;

}

}

}


这个考虑的不如快速排序时间那么久,可能还有可以改进或者商榷的地方。暂时就写这么多吧。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值