歸併排序,黑馬針不戳啊,思路清晰

2022-09-23 17:36:13 字數 1385 閱讀 4154

package sort;

//歸併排序的原理:1.盡可能的一組資料拆分成兩個元素相等的子組,並對每乙個子組繼續拆分,直到拆分後的每個子組的元素個數為1為止

//2.將相鄰的兩個子組進行合併成乙個有序的大組;3.不斷的重複步驟2,直到最終只有乙個組為止

//時間複雜度:層數log2(n).每層比較2^log2(n).所以時間複雜度:log2(n)*2^log2(n)即nlog2(n)。即o(nlog(n)).小於o(n2).更快

//比冒泡,選擇,插入排序都要高,和希爾排序相比,效率差不多,具體用哪個看排序穩定性

//由於需要乙個輔助陣列,所以空間占用上更複雜,典型的用空間換時間

public class mergesort

//對陣列a中的元素進行排序

public static void sort(comparable a)

//對陣列a中從lo到hi的元素進行排序

private static void sort(comparable a, int lo, int hi)

//對lo和hi之間的資料進行分為兩個組

int mid = lo +(hi-lo)/2; // 5 , 9 則mid=7

//分別對每一組的資料進行排序

sort(a,lo,mid);

sort(a,mid+1,hi);

//再把兩個組中的資料進行歸併

merge(a,lo,mid,hi);

}//對陣列中,從lo到mid為一組,從mid+1到hi為一組,對這兩組資料進行歸併

private static void merge(comparable a, int lo, int mid, int hi)

}遍歷,如果p1的指標沒有走完,那麼按照順序移動p1的指標,把每個對應指標的元素放到輔助陣列i對應索引處

while (p1<=mid)

遍歷,如果p2的指標沒有走完,那麼按照順序移動p2的指標,把每個對應指標的元素放到輔助陣列i對應索引處

while (p2<=hi)

//4.最後把輔助陣列中的元素拷貝到原陣列中,完成排序

for (int index=lo;index<=hi;index++)

}

//測試

package test;

import sort.mergesort;

import j**a.util.arrays;

public class mergesorttest ;

mergesort.sort(a);

system.out.println(arrays.tostring(a));

//[1, 5, 5, 6, 8, 9, 10, 40]

}

歸併排序(2 路歸併排序)

遞迴寫法 include define maxn 100 void merge int a,int l1,int r1,int l2,int r2 將陣列a的區間 l1,r1 和區間 l2,r2 合併為乙個有序區間 else while i r1 while j r2 for int i 0 i非遞...

python歸併排序 python 歸併排序

排序思路 1.將陣列分成兩組a,b,建立臨時陣列 c,c長度 a b 2.i,j分別屬於a,b 3.若a i b j 將b j 放入c,j 否則 a i 放入c,i 4.迴圈3步驟,將a或b中剩餘的元素放入c,再將c複製到陣列中 5.遞迴3 4直到a,b序列的長度 1 歸併排序 class merg...

排序 歸併排序

歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併 將兩個已經排好序的集合合併到乙個集合眾,並且保證新的集合也是有序的。核心點 只有乙個元素的集合是已經排好序的集合。歸併排序是建立在...