歸併排序Merge

2021-08-21 21:52:18 字數 1459 閱讀 5077

歸併排序

歸併排序是一種基於分治法的一種排序方法。它將要排序的序列分成兩個長度相等的子串行,為每乙個子串行進行排序,然後再將子串行合併成乙個有序的序列。

//歸併排序

//時間複雜度 o(n*logn)

//空間複雜度 o(n)

//穩定性:穩定排序

//////

//////

/////

//第乙個區間[beg,mid)

//第二個區間[mid,end)

void _mergearr(int arr, int64_t beg, int64_t mid, int64_t end, int* tmp)

}if(cur1while(cur1else

void _mergesort(int arr, int64_t beg, int64_t end, int* tmp)

int64_t mid=beg+(end-beg)/2;

_mergesort(arr, beg, mid, tmp);

_mergesort(arr, mid, end, tmp);

//先保證左右區間均是有序,才能進行合併

_mergearr(arr, beg, mid, end, tmp);

}void mergesort(int arr, int64_t size)

//***********************************==

//歸併排序

return ;

}int64_t mid=beg+ (end-beg)/2;

_mergesort(arr, beg, mid, tmp);

_mergesort(arr, mid, end, tmp);

mergearr(arr,beg,mid,end,tmp);

}void mergesort(int arr, int64_t size)

優化:當劃分子區間的元素小於13個元素左右時,使用歸併排序的效率不是很高,

這個時候我們改用直接插入排序來進行優化

void _mergesort(int array, int64_t beg, int64_t end, int* tmp)

int64_t mid = beg + (end - beg) / 2;

if(begin

< mid)

else

}if(mid + 1

< end)

else

}//先保證左右區間均為有序區間後,才能進行合併

_mergearray(array, beg, mid, end, tmp);

}

歸併排序 完成merge方法

在工程問題中,當對大量資料進行排序的時候,資料往往是放在陣列中的。這時進行排序需要一些騰挪的技巧。一般是使用乙個臨時的陣列空間儲存中間結果,排好序以後,再拷貝回原來的陣列。package cn.itcast.sort public class mergesort data中的資料,low,mid m...

歸併排序(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...