快速: 大量 無序
歸併:大資料 外排序
是否基本有序: 有 - > 歸併 無 ->快速
public class mergesort ;
int sort = sort(a, 0, a.length);
for (int i = 0; i < sort.length; i++)
}/**
* 歸併排序
* 簡介:將兩個(或兩個以上)有序表合併成乙個新的有序表 即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列
* 時間複雜度為o(nlogn)
* 穩定排序方式
* @param nums 待排序陣列
* @return 輸出有序陣列
*/public static int sort(int nums, int low, int high)
return nums;
}/**
* 將陣列中low到high位置的數進行排序
* @param nums 待排序陣列
* @param low 待排的開始位置
* @param mid 待排中間位置
* @param high 待排結束位置
*/public static void merge(int nums, int low, int mid, int high) else
}// 把左邊剩餘的數移入陣列
while (i <= mid)
// 把右邊邊剩餘的數移入陣列
while (j <= high)
// 把新陣列中的數覆蓋nums陣列
for (int k2 = 0; k2 < temp.length; k2++) }}
找最小值
放在左邊(交換位置)
不斷迭代
適合場景: 有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序。
核心思想:
每步將乙個待排序的記錄,按其值的大小插入前面已經排序的檔案中適當位置上
不斷迭代
插入排序在大量資料有序的情況下,時間複雜度為0(n),和未排序的鍵值對有關
shell排序
它是在插入排序基礎上的優化,適合大量的無序的資料排序
思想:先轉換為部分有序(通過跳躍性邏輯分組【比如1,5,9,13】),
將每個小組進行排序
直到增量=1變為插入排序
演算法思想 排序
排序並不是一種演算法思想,而是基於遍歷的一種演算法實現。形形色色的排序演算法,並不能絕對的認為哪一種排序最好,因為最好的度量指標究竟是耗時 記憶體占用亦或是穩定性是不確定的,這個要根據使用場景來決定,但是我們必須掌握各種排序方法的實現原理,這樣才能做到 具體問題具體分析 下圖為多種排序演算法的特性歸...
插入排序思想與實現
插入排序的基本思想 每一趟將乙個待排序元素,按其排序碼大小插入到前面已經排好序的一組元素的適當位置上,直到所有待排序元素元素全部插入為止。在這裡,這裡介紹兩種具體的插入排序演算法 直接插入排序,希爾排序。1 直接插入排序 直接插入排序的思想 當插入第i i 1 個元素時,前面的arr 0 arr i...
java實現歸併排序(思想與實現)
歸併排序 歸併排序是採用分治法的乙個非常典型的應用。歸併排序的思想就是先遞迴分解陣列,再合併陣列。將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。歸併排序的...