归并排序
- 时间复杂度O(NlogN)
- 空间复杂度O(N)
- 按照我个人理解,归并简要来讲就是将一组数二分分别排序再合并。
直接上code
#include<iostream>
#include<stdlib.h>
#include<time.h>
#define N 1000000
using namespace std;
//合并函数
void Merge(int a[], int R, int mid, int L){
int help[R-L+1];
int i = 0;
int p1 = L;
int p2 = mid + 1;
while(p1 <= mid && p2 <= R){
help[i++] = a[p1] < a[p2] ? a[p1++] : a[p2++];
}
while(p1 <= mid){
help[i++] = a[p1++];
}
while(p2 <= R){
help[i++] = a[p2++];
}
for(int i = 0; i < R-L+1; ++i){
a[i+L] = help[i];
}
}
//主排序函数
void Mergesort(int a[], int L, int R){
if(R == L)
return;
int mid = L + (R-L)/2;
Mergesort(a, L, mid);
Mergesort(a, mid + 1, R);
Merge(a, R, mid, L);
}
int main()
{
int a[10];
//这儿用了我上一篇提到的随机函数,为数组中的每个元素赋一个随机数
srand((unsigned) time(NULL));
for(int i = 0; i < 10; ++i){
a[i] = 3 + rand() %10;
}
Mergesort(a,0,9);
for(int i = 0; i < 10; ++i)
cout << a[i] << " ";
return 0;
}
具体算法讲解会继续补充,本文持续更新中~