排序演算法思想與實現

2021-09-14 05:54:46 字數 1462 閱讀 9785

快速: 大量 無序  

歸併:大資料 外排序

是否基本有序: 有 -  > 歸併   無 ->快速 

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實現歸併排序(思想與實現)

歸併排序 歸併排序是採用分治法的乙個非常典型的應用。歸併排序的思想就是先遞迴分解陣列,再合併陣列。將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。歸併排序的...