排序之氣泡排序 插入排序及希爾排序

2021-07-03 16:05:18 字數 1887 閱讀 5271

基本思想:對於每一趟的排序,從第乙個數開始,依次比較前乙個數與後乙個數的大小。

如果前乙個數比後乙個數大,則進行交換。這樣一輪過後,最大的數將會出現在最末位的位置。

第二輪則去掉最後乙個數,對前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

基本思想:將待插入記錄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個逆序對。(下表ia[j]則稱(i,j)為一對逆序對)

如果序列基本有序,則插入排序簡單且高效。

任意n個不同元素組成的序列平均具有n(n-1)/4個逆序對

任何僅以交換相鄰元素來排序的演算法,其平均時間複雜度為歐美閣(n*n)

克服了前兩種排序每次只交換相鄰元素來排序的問題。

基本思想:先將整個待排元素序列分割成若干個子串行(由相隔某個「增量d」的元素組成的),分別對相隔d的元素進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。

快速排序,氣泡排序,插入排序,希爾排序

快速排序 氣泡排序 插入排序 插入排序是最簡單最直觀的排序演算法,它的依據是 遍歷到第n個元素的時候前面的n 1個元素已經是排序好的了,那麼就查詢前面的n 1個元素把這第n個元素放在合適的位置,如此下去直到遍歷完序列的元素為止.演算法的複雜度也是簡單的,排序第乙個需要1的複雜度,排序第二個需要2的複...

插入排序 選擇排序 氣泡排序 希爾排序

引入概念 排序穩定性 輸入資料的順序,排序後不能改變。例如,1,2,3,3,5.排序完若第乙個3和第二個3互換,則為不穩定。1.插入排序 穩定 解釋 像打撲克時整理牌時一樣,遇到小牌就插在前面比他大的前面,而後面的牌順次後移 直到處理完最後一張牌。優點 比氣泡排序只能處理相鄰資料更為靈活,適用於資料...

氣泡排序,插入排序,選擇排序,希爾排序

在另外的文章中介紹了快速,堆,歸併排序,這三個排序都是高效的排序,下面介紹一些時間複雜度為o n 2 的排序。氣泡排序,顧名思義,就是將小的元素往上冒,大的元素往下沉,實際在變成的時候用的是大的元素往下沉的方法。每一趟過後,都有乙個最大的元素被沉到底。下一次排序時陣列規模減少了1。主要應用到了相鄰兩...