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 空间复杂度及时间复杂度