八大基本排序演算法-----歸併排序
阿新 • • 發佈:2020-11-22
歸併排序(Merge Sort)
-
基本思想:參考
歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法的一個非常典型的應用。
首先考慮下如何將2個有序數列合併。這個非常簡單,只要從比較2個數列的第一個數,誰小就先取誰,取了後就在對應數列中刪除這個數。然後再進行比較,如果有數列為空,那直接將另一個數列的資料依次取出即可。 -
//將有序陣列a[]和b[]合併到c[]中 void MemeryArray(int a[], int n, int b[], int m, int c[]) { int i, j, k; i = j = k = 0; while (i < n && j < m) {
解決了上面的合併有序數列問題,再來看歸併排序,其的基本思路就是將陣列分成2組A,B,如果這2組組內的資料都是有序的,那麼就可以很方便的將這2組資料進行排序。如何讓這2組組內資料有序了?
可以將A,B組各自再分成2組。依次類推,當分出來的小組只有1個數據時,可以認為這個小組組內已經達到了有序,然後再合併相鄰的2個小組就可以了。這樣通過先遞迴的分解數列 -
平均時間複雜度:O(NlogN)
歸併排序的效率是比較高的,設數列長為N,將數列分開成小數列一共要logN步,每步都是一個合併有序數列的過程,時間複雜度可以記為O(N),故一共為O(N*logN)。 -
public static void merge_sort(int a[],int first,int last,int temp[]){ if(first < last){ int middle = (first + last)/2; merge_sort(a,first,middle,temp);//左半部分排好序 merge_sort(a,middle+1,last,temp);//