我們先來乙個兩個有序的陣列a和b進行排序的**,兩個有序的陣列進行排序只需每次選擇兩個陣列中最小的那個數放進c中就ok了,之後如果那個陣列還有剩餘就將其直接接在c後面。時間效率還是很快的達到了o(n)。
python原始碼
def memeryarray(a,b,c):
i = 0
j = 0
k = 0
n = len(a)
m = len(b)
while i
c++原始碼
void memeryarray(int a, int n, int b, int m, int c)
while (i < n)
c[k++] = a[i++];
while (j < m)
c[k++] = b[j++];
}
如果將乙個無序的陣列怎麼進行歸併排序呢,我們可以這樣想,單個元素相當於乙個有序的序列,只需將其兩兩合併,只要迴圈log(n)次就可以了。我們通過遞迴將其遞迴到單個元素的情況,之後兩兩排序返回。時間複雜度為o(log(n)*n)。
python原始碼
def mergearray(a,first,mid,last):
temp =
i = first
j = mid + 1
m = mid
n = last
k = 0
while i<=m and j<=n:
if a[i] <= a[j]:
k = k + 1
i = i + 1
else:
k = k + 1
j = j + 1
while i<=m:
k = k + 1
i = i + 1
while i<=m:
k = k + 1
j = j + 1
for i in range(0,k):
a[first + i] = temp[i]
def mergesort(a,first,last):
if first
c++原始碼
void mergearray(int a, int first, int mid, int last, int temp)
while (i <= m)
temp[k++] = a[i++];
while (j <= n)
temp[k++] = a[j++];
for (i = 0; i < k; i++)
a[first + i] = temp[i];
}void mergesort(int a, int first, int last, int temp)
}bool mergesort(int a, int n)
5 歸併排序(詳細)
目錄 sort類在選擇排序中的約定中 歸併排序的思想是將陣列分成兩部分,分別進行排序,然後歸併起來。歸併方法將陣列中兩個已經排序的部分歸併成乙個。算是乙個輔助方法把,下面不管哪種歸併排序都會用到 public abstract class mergesort comparable extends s...
歸併排序詳細解說
歸併排序 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使 子串行段間有序。1 遞迴方法 有兩個重要的特點,可以適用於外部排序 資料在磁碟上 也可以適用於鍊錶排序 希爾,堆排序,快速排序依賴隨機訪...
Scala歸併排序解析
一 源 def msort t xs list t lt t,t boolen list t val fst,snd xs splitat n merge msort fst lt msort snd lt 源 來自coursera scala函式式程式設計原理 其中,msort函式的第二個引數 l...