【C++】氣泡排序
阿新 • • 發佈:2020-11-25
效能分析:
時間複雜度:O(n^2)
空間複雜度:O(1)
#include<iostream> #include<vector> using namespace std; int main() { // 思想: // 在原始待排序序列上操作; // 將原始待排序序列分成無序區和有序區兩部分; // 初始狀態下整個原始序列為無序區,每遍歷一遍就浮現出無序區最大的元素放在有序區; // 隨著遍歷,最終無序區長度變為0,整個原始序列變為有序序列. int data[] = { 1,3,5,2,7,8,9,6,0 }; // 設定一個監控位,用於記錄是否無序區碰巧為有序的,那麼便免於對已經有序的序列排序bool flag = true; //獲取序列元素個數 auto length = 9; //開始遍歷查詢無序區最大值 for (int i = 0; i < length && flag; i++)//如果flag為false,說明下面沒有進行資料交換,則說明已經是有序的了,就不用再迴圈浪費時間了 { flag = false; for (int j = length - 2; j >= i; j--)//迴圈裡頭,從後往前,兩兩比較,把小的往前挪 { if (data[j] > data[j + 1]) { int temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp; //如果有資料交換,則置為true flag = true; } } } for (int i = 0; i < length; i++) { cout << data[i] << ""; } }