常見的幾種排序演算法

2022-02-16 23:57:43 字數 1690 閱讀 2590

1、氣泡排序

最簡單的一種排序演算法。假設長度為n的陣列arr,要按照從小到大排序。則氣泡排序的具體過程可以描述為:首先從陣列的第乙個元素開始到陣列最後乙個元素為止,對陣列中相鄰的兩個元素進行比較,如果位於陣列左端的元素大於陣列右端的元素,則交換這兩個元素在陣列中的位置,此時陣列最右端的元素即為該陣列中所有元素的最大值。接著對該陣列剩下的n-1個元素進行氣泡排序,直到整個陣列有序排列。演算法的時間複雜度為o(n^2)。

2、選擇排序

嚴蔚敏版《資料結構》中對選擇排序的基本思想描述為:每一趟在n-i+1(i=1,2,...,n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。具體來說,假設長度為n的陣列arr,要按照從小到大排序,那麼先從n個數字中找到最小值min1,如果最小值min1的位置不在陣列的最左端(也就是min1不等於arr[0]),則將最小值min1和arr[0]交換,接著在剩下的n-1個數字中找到最小值min2,如果最小值min2不等於arr[1],則交換這兩個數字,依次類推,直到陣列arr有序排列。演算法的時間複雜度為o(n^2)。

3、插入排序

示意圖插入排序的基本思想就是將無序序列插入到有序序列中。例如要將陣列arr=[4,2,8,0,5,1]排序,可以將4看做是乙個有序序列(圖中用藍色標出),將[2,8,0,5,1]看做乙個無序序列。無序序列中2比4小,於是將2插入到4的左邊,此時有序序列變成了[2,4],無序序列變成了[8,0,5,1]。無序序列中8比4大,於是將8插入到4的右邊,有序序列變成了[2,4,8],無序序列變成了[0,5,1]。以此類推,最終陣列按照從小到大排序。該演算法的時間複雜度為o(n^2)。

4、希爾排序

希爾排序(shell's sort)在插入排序演算法的基礎上進行了改進,演算法的時間複雜度與前面幾種演算法相比有較大的改進。其演算法的基本思想是:先將待排記錄序列分割成為若干子串行分別進行插入排序,待整個序列中的記錄"基本有序"時,再對全體記錄進行一次直接插入排序。

5、快速排序

快速排序的基本思想是:通過一趟排序將待排記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分記錄繼續進行排序,已達到整個序列有序。一趟快速排序的具體過程可描述為:從待排序列中任意選取乙個記錄(通常選取第乙個記錄)作為基準值,然後將記錄中關鍵字比它小的記錄都安置在它的位置之前,將記錄中關鍵字比它大的記錄都安置在它的位置之後。這樣,以該基準值為分界線,將待排序列分成的兩個子串行。

一趟快速排序的具體做法為:設定兩個指標low和high分別指向待排序列的開始和結尾,記錄下基準值baseval(待排序列的第乙個記錄),然後先從high所指的位置向前搜尋直到找到乙個小於baseval的記錄並互相交換,接著從low所指向的位置向後搜尋直到找到乙個大於baseval的記錄並互相交換,重複這兩個步驟直到low=high為止。

幾種常見排序演算法

幾種常見排序演算法 1氣泡排序 bubble sort 氣泡排序思路 將序列當中的左右元素,依次比較,保證右邊的元素始終大於左邊的元素 第一輪結束後,序列最後乙個元素一定是當前序列的最大值 對序列當中剩下的n 1個元素再次執行步驟1。3.對於長度為n的序列,一共需要執行n 1輪比較 實現 for i...

幾種常見排序演算法

1氣泡排序 bubble sort 氣泡排序思路 1.將序列當中的左右元素,依次比較,保證右邊的元素始終大於左邊的元素 第一輪結束後,序列最後乙個元素一定是當前序列的最大值 2.對序列當中剩下的n 1個元素再次執行步驟1。3.對於長度為n的序列,一共需要執行n 1輪比較 實現 for i 0 i n...

幾種常見排序演算法

以下內容包括 氣泡排序,選擇排序,桶排序 一 氣泡排序 bubblesort public class bubblesort int temp 0 for int i 0 i1 i system.out.println arrays.tostring arr 用arrays類中的tostring方法...