概述
用到了随机函数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];
// 左边起始 右边起始 右边终点
// 此时S[L]~S[R-1] S[R]~S[Rd]已经有序了,进行合并
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++];
//将有序的T重新复制到原始的S,范围为[t, Rd];
for(int i = t; i <= Rd; i++) S[i] = T[i];
}
//左边起始 右边终点
void MSort(int L, int Rd)
{
int center = (L + Rd) / 2;
//L = Rd时,左右只有一个元素,结束递归
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;
}
最后
以上就是过时口红为你收集整理的归并排序(递归实现)的全部内容,希望文章能够帮你解决归并排序(递归实现)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复