冒泡排序及优化

本文介绍了冒泡排序的基本思想,以及三种优化方法。优化1是通过设置标记变量,如果在一轮比较中未发生交换则提前结束排序。优化2利用nextpos记录上轮排序最后交换的位置,减少比较范围。优化3结合正向和反向扫描,一轮排序确定两个正确位置的值。文章还提到了参考来源。
摘要由CSDN通过智能技术生成

冒泡排序及其优化

基础写法

冒泡排序思想:泡泡一直向上冒,冒到不能冒的位置。即每次比较两个相邻元素,如果顺序不对就交换,这样一轮交换就能确定当前最大/小值。

假设数组 a r r a y [ 1... n ] array[1...n] array[1...n],按照从小到大排序,如果第1个元素大于第2个元素,则交换两个元素,一直到第n-1个元素和第n个元素比较,那么一轮结束,第n个元素一定是该数组的最大值,接下来第2轮对 a r r a y [ 1... n − 1 ] array[1...n-1] array[1...n1]进行相同操作,第n-1个元素一定是第2大元素。一共需要n-1轮比较。

以下代码全部按照从小到大排序。

void bubblesort(vector<int> &numbers)
{
   
    int len = numbers.size();
    if(len <= 0) return;
    int swapTmp;
    for(int i = 1; i < len; i++) //确定比较轮数
    {
   
        for(int j = 0; j < len-i; j++) //比较范围
        {
   
            if(numbers[j] > numbers[j+
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值