起泡排序(Bubble sort)
阿新 • • 發佈:2019-03-23
ima true pre img 提前 順序 標誌位 技術 swap
局部有序和整體有序
在由一組整數組成的序列A[0, n-1]中,滿足 $ A[i - 1] \leq A[i] $ 的相鄰元素稱為順序的;否則是逆序的。
掃描交換
由有序序列的特征,我們可以通過不斷改善局部的有序性實現整體的有序性:從前向後依次檢查每一對相鄰元素,一旦發現逆序即交換二者的位置。對於長度為n的序列,共需做n-1次比較,和不超過n-1次交換,這一過程稱為一趟掃描交換。
起泡排序
void bubblesort(int A[], int n) { bool sorted = false; // 整體排序標誌,先假定未排序 while(!sorted) { sorted = true; // 假定已排序 for(int i = 1; i < n; i++) { if(A[i-1] > A[i]) { swap(A[i-1], A[i]); // 逆序交換 sorted = false; // 出現逆序,所以整體排序為false } } n--; // 末元素已就位,可縮短待排序序列長度 } } // 借助bool型標誌位sorted,可及時提前退出,而不用總是蠻力地做n-1趟掃描交換
起泡排序(Bubble sort)