交換排序(氣泡排序、快速排序),選擇排序(直接選擇排序、堆排序),插入排序(直接插入排序、希爾排序)
1.氣泡排序演算法的運作如下:(從後往前)
比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
針對所有的元素重複以上的步驟,除了最後乙個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
若檔案的初始狀態是正序的,氣泡排序最好的時間複雜度為 ;若初始檔案是反序的,氣泡排序的最壞時間複雜度為 ,綜上,因此氣泡排序總的平均時間複雜度為 ,是一種穩定排序演算法。
public void dobubblesort(int src)
}printresult(i, src);}}
2.快速排序:首先在要排序的序列 a 中選取乙個中軸值,而後將序列分成兩個部分,其中左邊的部分 b 中的元素均小於或者等於 中軸值,右邊的部分 c 的元素 均大於或者等於中軸值,而後通過遞迴呼叫快速排序的過程分別對兩個部分進行排序,最後將兩部分產生的結果合併即可得到最後的排序序列。
下面我們通過乙個案例來演示一下快速排序的基本步驟: 以序列 46 30 82 90 56 17 95 15 共8個元素
初始狀態: 46 30 82 90 56 17 95 15 選擇46 作為基準值,i = 0, j = 7
i = 0 j = 7
1530 82 90 56 17 95 46 15 < 46, 交換 15 和 46,移動 i, i = 1
i = 1 j = 7
15 30 82 90 56 17 95 46 30 < 46, 不需要交換,移動 i , i = 2
i = 2 j = 7
15 30 46 90 56 17 95
82 82 > 46, 交換82 和 46,移動 j , j = 6
i = 2 j = 6
15 30 46 90 56 17 95 82
95 > 46, 不需要交換,移動 j , j = 5
i = 2 j = 5
15 30 17 90 56 46 95 82
17 < 46, 交換46 和 17,移動 i, i = 3
i = 3 j = 5
15 30 17 46
56 90 95 82
90 > 46, 交換90 和 46,移動 j , j = 4
3 = i j = 4
15 30 17 46
56 90 95 82
56 > 46, 不需要交換,移動 j , j = 3
i = j = 3
i = j = 3, 這樣序列就這樣分割成了兩部分,左邊部分 均小於 基準值(46);右邊部分 ,均大於基準值。這樣子我們就達到了分割序列的目標。在接著對子序列用同樣的辦法進行分割,直至子串行不超過乙個元素,那麼排序結束,整個序列處於有序狀態。
3.直接選擇排序:
第一次從r[0]~r[n-1]中選取最小值,與r[0]交換,第二次從r[1]~r[n-1]中選取最小值,與r[1]交換,總共通過n-1次,得到乙個按排序碼從小到大排列的有序序列。時間複雜度
為 o(n2) ,是一種不穩定的排序方法。共需要進行n-1次選擇和交換,每次選擇需要進行 n-i 次比較 (1<=i<=n-1),而每次交換最多需要3次移動,因此,總的比較次數c=(n*n - n)/2。
4.堆排序:堆實際上是一棵完全二叉樹,其任何一非葉節點滿足性質:任何一非葉節點的關鍵字不大於或者不小於其左右孩子節點的關鍵字。最壞情況下時間複雜度為nlogn。堆排序為不穩定排序,不適合記錄較少的排序。操作過程:
1)初始化堆:將r[1..n]構造為堆(每次調整都是從父節點、左孩子節點、右孩子節點三者中選擇最大者跟父節點進行交換(交換之後可能造成被交換的孩子節點不滿足堆的性質,因此每次交換之後要重新對被交換的孩子節點進行調整));
2)將當前無序區的堆頂元素r[1]同該區間的最後乙個記錄交換,然後將新的無序區調整為新的堆。
5.直接插入排序:陣列分為有序區(初始化為乙個元素)和無序區,每次從無序區找乙個數插入到有序區並保證其仍有序,輔助空間複雜度s(n)=o(1)。是乙個就地排序。是乙個穩定的排序方法。
6.希爾排序:增量的取值規則為第一次取總長度的一半,第二次取一半的一半,依次累推直到1為止
經典排序演算法(Java版)
1 氣泡排序 bubble sort 最簡單的排序方法是氣泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個 氣泡 序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。...
java 經典排序演算法
1 氣泡排序 bubble sort 最簡單的排序方法是氣泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個 氣泡 序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。...
排序演算法 java 版
第一 選擇排序 外層迴圈從第i個位置開始尋找最小值與i 1位置的元素進行交換,最終達到有序狀態。有點遞迴的思想,每次都是在i length中尋找最小值放在i 1的位置 第一層for迴圈,從陣列的索引1處開始向後值陣列結束,尋找最小值。public int selectsortmethod int v...