#include <iostream>
#include <cstdlib>
#include <ctime>
#define N 12
using namespace std;
/**
*46,74,16,53,14,26,40,53,86,65,27,34从小到大排序
*归并排序
*/
int B[N+1];//中转数组,存储分块后的值
/**********************合并算法*************************/
//将有序表A[low,mid]和A[mid+,high]合并到B中
void Merge(int *A,int low,int mid ,int high)
{
for(int i = low;i<=high;i++)
B[i]=A[i]; //把上次的结果复制到B中,然后进行排序
int i=low; //A中元素的下标
int j=mid+1; //A中元素的下标
int k=low; //B中元素的下标
while(i<=mid && j<=high)
{
if(B[i]<B[j])
A[k++] = B[i++];
else
A[k++] = B[j++];
}
while(i<=mid)
A[k++] = B[i++];
while(j<=high)
A[k++] = B[j++];
}
/***********************************************/
//给定区间的归并算法
void Msort(int *A ,int low,int high)
{
if(low<high)
{
int mid = (low + high)/2; //将当前序列A一分为2,求出分裂点mid
Msort(A,low,mid); //对子序列A[low,mid]进行递归归并排序,结果还是存在A中
Msort(A,mid+1,high);//对子序列A[mid+1,high]进行递归归并排序,结果还是存在A中
Merge(A,low,mid,high);
}
}
int main()
{
//初始化
int nums[N+1]={0,46,74,16,53,14,26,40,53,86,65,27,34};
//归并排序
Msort(nums,1,N);
//打印结果
for(int i=1;i<=N;i++)
cout<<nums[i]<<" ";
return 0;
}
C++数据结构-归并排序
猜你喜欢
转载自blog.csdn.net/weixin_43323201/article/details/84836012
今日推荐
周排行