-
问题
二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k -
解析
该算法采用分治策略,先将数组两两拆分,然后分别排序再归并。
-
设计
void MergeSort(int a[], int b[], int start, int end){
int mid;
if(start < end){
mid = start + (end-start) / 2;
MergeSort(a, b, start, mid);
MergeSort(a, b, mid+1, end);
Merge(a, b, start, mid, end);
}
}
void Merge(int a[],int b[], int start, int mid, int end){
int left = start, right=mid+1, tmp = start;
while(left<mid+1 && right<end+1){
if(a[left] > a[right]){
b[tmp++] = a[right++];
}
else{
b[tmp++] = a[left++];
}
}
while(left < mid+1){
b[tmp++] = a[left++];
}
while(right < end+1){
b[tmp++] = a[right++];
}
for(left=start; left<=end; left++){
a[left] = b[left];
}
} -
分析
时间复杂度: (1)最坏情况为n-1,时间复杂度为O(nlogn)。
(2)最好情况为n/2,时间复杂度为O(nlogn)。
(3)平均复杂度为O(nlogn)。
源码
https://github.com/DicHui/DicHui/tree/main
算法—二分归并
最新推荐文章于 2022-05-24 21:58:18 发布