基本思想:對於每一趟的排序,從第乙個數開始,依次比較前乙個數與後乙個數的大小。
如果前乙個數比後乙個數大,則進行交換。這樣一輪過後,最大的數將會出現在最末位的位置。
第二輪則去掉最後乙個數,對前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。主要應用到了相鄰兩...