数据结构-冒泡排序

1 概念

冒泡排序属于一种常见的交换排序,根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。具体操作是按顺序(从前往后或从后往前)两两对比元素直至本次排序结束,每次排序确认一个固定值(末位或首位)。需要注意的是,为了排序稳定性,如果遇到相同的元素,对比后不予改动。

2 具体算法

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> arr = { 10, 8, 7, 5, 4, 2 };

    //note 1 从前往后依次两两对比,每次都能确认一个末端最大值
    //note 2 每次排序完成后,最后一个确定值不参与下次排序
    //note 3 n个元素对比过程中,只需要比较n-1次
    //note 4 设置标志位,如果某次排序没有发生交换,说明已经有序,退出循环

    //第一层循环主要是为了确定还剩余需要遍历的元素个数,可能会提前结束
    //此处循环-1是因为note3
    for (int i = 0; i < arr.size() - 1; i++) {
        bool flag = false;
        //第二层循环主要是为了依次对比元素大小,每次比较元素总数都较上次少1
        //此处循环+1是因为size从1开始计数,数组从0开始计数
        for (int j = 0; j < arr.size() - (i + 1); j++) {
            //每次从第一个开始,与下一个做对比
            if (arr[j] > arr[j + 1]) {
                swap(arr[j], arr[j + 1]);
                flag = true;
            }
            //打印每次对比后的新序列
            for (int i = 0; i < arr.size(); i++) {
                cout << arr[i] << " ";
            }
            cout << endl;
        }
        cout << "complete a bubble sort once!" << endl << endl;
        if (!flag) {
            break;
        }
    }
}

3 执行结果

4 空间复杂度及时间复杂度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值