排序之冒泡排序、插入排序及希爾排序

1、冒泡排序

基本思想:對於每一趟的排序,從第一個數開始,依次比較前一個數與後一個數的大小。
如果前一個數比後一個數大,則進行交換。這樣一輪過後,最大的數將會出現在最末位的位置。
第二輪則去掉最後一個數,對前n-1個數再按照上面的步驟找出最大數,該數將出現在倒數第二的位置。
n-1輪過後,就完成了排序。
,舉例:冒泡排序1,5,2,3,9,8,6,
第一趟:,1<5,不換,5>2,交換1 2 5,3, 9 8,6
5>3交換,1 2 3 5 9 8,6
5<9不換,9>8交換,1 2 3 5 8 9,6,9>6交換,1 2 3 5 8 6 9         9的位置固定
第二趟:1<2不換,2<3不換,3<5不換,5<8不換,8>6交換1 2 3 5 6 8 9    8的位置固定
依次迭代
 N個數最壞情況下比較次數:1+2+......+N-1


2、插入排序

基本思想:將待插入記錄R[i]的關鍵字從右向左依次與有序區中記錄R[j](j=i - 1, i - 2, ....,1)的關鍵字比較:
若R[j]的關鍵字大於R[i]的關鍵字,則將R[j]後移一個位置
若R[j]的關鍵字小於或等於R[i]的關鍵字,則查找過程結束,j + 1即爲R[i]插入位置
舉例:插入排序:34,8,64,51,32,21
假設一開始有數字:34    8<34       8 34
64>34          8 34 64
51<64 51>34    8 34 51 64
32<64 32<51 32<34  32>8    8 32 34 51 64
21<64 21<51 21<34 21<32 21>8       8 21 32 34 51 64    
插入和冒泡,每次交換2個相鄰元素時,正好消去1個逆序對。(下表i<j,如果A[i]>A[j]則稱(i,j)爲一對逆序對)
如果序列基本有序,則插入排序簡單且高效。
任意N個不同元素組成的序列平均具有N(N-1)/4個逆序對
任何僅以交換相鄰元素來排序的算法,其平均時間複雜度爲歐美閣(N*N)

3、希爾排序

克服了前兩種排序每次只交換相鄰元素來排序的問題。
基本思想:先將整個待排元素序列分割成若干個子序列(由相隔某個“增量D”的元素組成的),分別對相隔D的元素進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章