通用歸併排序

2021-06-07 23:55:22 字數 930 閱讀 2588

用支援遞迴的語言實現歸併排序是很簡單的。假設m_sort可以將乙個陣列排序,那麼m_sort的遞迴邏輯為:(m_sort的定義為void m_sort(void* arr, int left, int right))

基礎:當right<=left時,直接返回

歸納:求得left和right的中間值mid = (left + right) / 2,將m_sort作用於陣列區間[left, mid]和[mid + 1, right],因為我們已經假設m_sort可以將陣列排序,那麼經過兩次m_sort呼叫後,arr[left, mid]和arr[mid + 1, right]陣列實際上已經變成了排序陣列,之後,我們將這兩個排序陣列歸併為乙個排序陣列。

遞迴排序的時間複雜度為:o(n*log(n)),與快速排序的時間複雜度是一樣的,並且它還是一種穩定的排序演算法。

#include #include #include static void merge(void* arr, int(*cmp)(void*, void*), int left, int mid, int right, int size)

else

} while (i <= mid)

while (j <= right)

for (i = 0; i < k; ++i)

memcpy((char*)arr + (i + left) * size, tmparr + i * size, size);

free(tmparr);

}static void m_sort(void* arr, int(*cmp)(void*, void*), int left, int right, int size)

void mergesort(void* arr, int n, int(*cmp)(void*, void*), int size)

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