用到了随机函数rand()进行随机取值,并排序;
归并排序算法:先将元素一分为二,递归的去分割直到分割到左右只剩一个元素,(只剩一个元素,其实也就是有序的),再利用Merge函数进行合并,将数据临时存储到T数组,再将合并的元素全部复制到原S数组,完成的一个部分的有序处理,递归解决左右;
递归实现原理图示:
时间复杂度:O(NlogN)
参考代码:
#include <ctime>
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
#define INF 0x3f3f3f3f
#define MAX 1010
using namespace std;
int S[MAX], T[MAX];
void Merge(int L, int R, int Rd)
{
int k = L, t = L;
int Ld = R - 1;
while(L <= Ld && R <= Rd)
{
if(S[L] < S[R]) T[k++] = S[L++];
else T[k++] = S[R++];
}
while(L <= Ld) T[k++] = S[L++];
while(R <= Rd) T[k++] = S[R++];
for(int i = t; i <= Rd; i++) S[i] = T[i];
}
void MSort(int L, int Rd)
{
int center = (L + Rd) / 2;
if(L < Rd)
{
MSort(L, center);
MSort(center + 1, Rd);
Merge(L, center + 1, Rd);
}
}
void Print(int N)
{
for(int i = 0; i < N; i++) cout << S[i] <<" ";
}
void MergeSort(int N)
{
MSort(0, N - 1);
}
int main()
{
srand(time(NULL));
for(int i = 0; i < 20; i++)
{
S[i] = rand() % 100;
}
MergeSort(20);
Print(20);
return 0;
}