1. 程式人生 > 實用技巧 >【C++】氣泡排序

【C++】氣泡排序

效能分析:

  時間複雜度: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] << "
"; } }