核心思路:
雙重迴圈
外層是進行多少輪,一輪冒泡只能排好乙個數,所以有n輪;(這是最好的理解方式)
內層是單次冒泡,冒泡的核心是逐個,相鄰元素兩兩比較,如此,一輪冒泡後,最大(最小)元素就跑到最後面了
//核心**
void sort(int *a, int
len)
}
改進版1:
核心思想:如果某一趟內層沒有進行交換,那顯然整個陣列已經有序,那就可以退出了。
//核心**
void sort(int *a, int
len)
}if (!flag) break
; }
}
實現:在所有迴圈外部設定乙個標籤true,表示此時陣列有序;最內層如果交換執行,標籤就會被設定為false,表明此時陣列無序,仍需進入下一輪;如果內層迴圈乙個也沒執行,那標籤就是原始的true;在外層迴圈內設定乙個條件跳出器,一旦檢測到true就結束外層迴圈。改進版,網上有很多有意思的寫法,總體就是乙個多公尺諾玩具,相互觸發,很好玩。
//巧妙的改寫版本
void sort(int *a, int
len)
}k--;
}}
改進2:
還有一種情況需要改進,即陣列前面部分無序,後面有序(3,2,1,4,5,6,7,8)。此時可以記錄那個臨界的位置,下次內層冒泡的終點就可以提前。
//這種演算法還是少些得好,太晦澀
void sort(int *a, int
len)}}
}
白話經典演算法之七大排序總結篇
首先回顧下各種排序的主要思路 一 氣泡排序 氣泡排序主要思路是 通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就 沉 到最後面了。重複n次即可以使陣列有序。氣泡排序改進1 在某次遍歷中如果沒有資料交換,說明整個陣列已經有序。因此通過設定標誌位來記錄此次遍歷有無資料交換就可以判斷...
白話經典演算法系列之八 白話經典演算法之七大排序總結篇
在我的部落格對氣泡排序,直接插入排序,直接選擇排序,希爾排序,歸併排序,快速排序和堆排序這七種常用的排序方法進行了詳細的講解。首先回顧下各種排序的主要思路 一 氣泡排序 氣泡排序主要思路是 通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就 沉 到最後面了。重複n次即可以使陣列有...
七大排序演算法
氣泡排序 void bubble int a,int n 選擇排序 void select sort int a,int n n為陣列a的元素個數 將第i 小的數,放在第i 個位置 如果剛好,就不用交換 if i min index 插入排序 typedef int elementtype void...