栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

C++算法(十二)冒泡排序 最基础的排序算法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++算法(十二)冒泡排序 最基础的排序算法

文章目录

冒泡排序一、题目描述二、解题思路及代码实现

1、解题思路2、C++代码实现 三、提交结果总结


冒泡排序 一、题目描述

给定一个数组 in,请实现插入排序算法。

示例:

输入: in = [3,4,2,1,5,0]
输出: ret = [0,1,2,3,4,5]

二、解题思路及代码实现 1、解题思路

冒泡排序的思想:
内循环:数组从最左边开始,依次比较相邻的元素,如果左侧元素大于右侧元素,则交换两个元素,直到最右侧的元素。这样一轮循环下来,最大元素已经被交换到了最右侧。
外循环:控制内循环。每执行一遍内循环,外循环遍历次数-1,当外循环结束时,数组即完成排序。
优化:增加一个标志,当内循环没有交换任何一个元素的时候,可以退出排序,提前完成排序工作,可以提高效率。

我们可以通过调试查看每次循环的执行结果,来理解冒泡排序:
1、初始状态:

2、第一轮内循环:最大值5已经排好序
i=0:3、4不变,结果: 3, 4, 2 ,1, 5, 0
i=1:4、2交换,结果: 3, 2, 4 ,1, 5, 0
i=2:4、1交换,结果: 3, 2, 1 ,4, 5, 0
i=3:4、5不变,结果: 3, 2, 1 ,4, 5, 0
i=4:5、0交换,结果: 3, 2, 1 ,4, 0, 5
i=5 j=5:结束内循环

3、第二轮内循环:4已经排好序
i=0:3、2交换,结果: 2, 3, 1 ,4, 0, 5
i=1:3、1交换,结果: 2, 1, 3 ,4, 0, 5
i=2:3、4不变,结果: 2, 1, 3 ,4, 0, 5
i=3:4、0交换,结果: 2, 1, 3 ,0, 4, 5
i=4 j=4:结束内循环

4、第三轮内循环:3已经排好序
i=0:2、1交换,结果: 1, 2, 3 ,0, 4, 5
i=1:2、3不变,结果: 1, 2, 3 ,0, 4, 5
i=2:3、0交换,结果: 1, 2, 0 ,3, 4, 5
i=3 j=3:结束内循环

5、第四轮内循环:2已经排好序
i=0:1、2不变,结果: 1, 2, 0 ,3, 4, 5
i=1:2、0交换,结果: 1, 0, 2 ,3, 4, 5
i=2 j=2:结束内循环


6、第五轮内循环:1已经排好序
i=0:0、1交换,结果: 0, 1, 2 ,3, 4, 5
i=1 j=1:结束内循环


7、外循环j等于0退出,此时只有一个最左侧元素,自然是最小值,无需再处理,排序完成。

2、C++代码实现
vector bubble_sort(vector in) {
    int flag = true;
    int length = in.size();

    for (int j = length - 1; j > 0; j--) {
        for (int i = 0; i < j; i++) {
            if (in.at(i) > in.at(i+1)) {
                int tmp = in.at(i+1);
                in[i+1] = in[i];
                in[i] = tmp;
                flag = false;
            }
        }

        if (flag) return in;

        flag = true;
    }

    return in;
}
三、提交结果

无提交结果。


总结

冒泡排序算是最基础的一种排序算法,其时间复杂度为O(N*N),就像水底的气泡,越往上冒,泡泡越大。这个c++版本的冒泡排序是加入了优化算法的,并不一定需要外循环全部执行完才退出,当内循环没有一次元素交换时,就表明所有元素已经排好序了,可以提前退出,结束排序了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/764351.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号