常用的幾種排序演算法
選擇排序方法時,除了基本實現的要求外,還應當注重所選擇演算法的時間、空間複雜度既執行效率,另外在實際工作中往往還要注意演算法的穩定性(排序後相同元素的相對位置是否發生改變)等。
一、冒泡、插入、選擇
二、快排、歸併
1、氣泡排序
氣泡排序只會操作相鄰的兩個資料。每次冒泡操作都會對相鄰的兩個元素進行比較,看是否滿足大小關係要求,如果不滿足則兩者互換。
public static void bubblesort(int nums)
}system.out.println(i + 1 + "次 冒泡:" + arrays.tostring(nums));}}
輸出:1次冒泡:[4, 5, 1, 3, 2, 6]
2次冒泡:[4, 1, 3, 2, 5, 6]
3次冒泡:[1, 3, 2, 4, 5, 6]
4次冒泡:[1, 2, 3, 4, 5, 6]
5次冒泡:[1, 2, 3, 4, 5, 6]
6次冒泡:[1, 2, 3, 4, 5, 6]
氣泡排序只涉及相鄰元素的對比交換,空間複雜度o(1),時間複雜度最好情況o(n),最壞情況o(n2),相鄰元素相等不作交換則為穩定排序。
2、插入排序
將陣列分為兩個區間、已排區間和未排區間。初始已拍區間只有陣列的第乙個元素,之後每次取未排區間元素插入到已排區間中合適的位置。
}nums[j + 1] = value; //插入資料
system.out.println(i + "次插入:" + arrays.tostring(nums));}}
輸出:1次插入:[4, 5, 6, 1, 3, 2]
2次插入:[4, 5, 6, 1, 3, 2]
3次插入:[1, 4, 5, 6, 3, 2]
4次插入:[1, 3, 4, 5, 6, 2]
5次插入:[1, 2, 3, 4, 5, 6]
插入排空間複雜度o(1),時間複雜度最好情況o(n),最壞情況o(n2),元素相等不作交換則為穩定排序。
3、選擇排序
有點類似插入排序,選擇排序也分為已排和未排兩個區間,區別於插入排序的是,每次從未排區間中取最小數插入到已排區間的末尾。
system.out.println(i + 1 + "次選擇排序:" + arrays.tostring(nums));}}
輸出:1次選擇排序:[1, 5, 6, 4, 3, 2]
2次選擇排序:[1, 2, 6, 4, 3, 5]
3次選擇排序:[1, 2, 3, 4, 6, 5]
4次選擇排序:[1, 2, 3, 4, 6, 5]
5次選擇排序:[1, 2, 3, 4, 5, 6]
6次選擇排序:[1, 2, 3, 4, 5, 6]
選擇排空間複雜度o(1),時間複雜度最好情況o(n2),最壞情況o(n2),每次選最小值維持不了原有位置所以為不穩定排序。
幾種常用排序演算法
一 氣泡排序 已知一組無序資料a 1 a 2 a n 需將其按公升序排列。首先比較a 1 與a 2 的值,若a 1 大於a 2 則交換兩者的值,否則不變。再比較a 2 與a 3 的值,若a 2 大於a 3 則交換兩者的值,否則不變。再比較a 3 與a 4 依此類推,最後比較a n 1 與a n 的值...
幾種常用的排序演算法
介紹 快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 n log n 次比較。在最壞狀況下則需要 n 2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 n log n 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地被實...
幾種常用排序演算法總結
排序 強力推薦,這個算是總結的不錯的一篇文章,直接轉了 文章中的 也許有些錯誤,關於直接插入排序,第一篇已經做出了修改,其他的有時間再看 所謂排序,就是要整理檔案中的記錄,使之按關鍵字遞增 或遞減 次序排列起來。當待排序記錄的關鍵字都不相同時,排序結果是惟一的,否則排序結果不惟一。在待排序的檔案中,...