归并排序

/*归并排序算法思想,其思想是基于合并,
将两个或两个以上的有序表合成一个新的有序表
首先将n个记录看成n个有序的子序列,每个子序列的长度为1
然后两两归并得到n/2个长度为2的有序子序列,再在此基础上,
对长度为二的进行两两归并,得到若干个长度为4的有序子序列。
如此重复,直到得到一个长度为n的有序序列为止*/

#include<iostream>
#include<cstdlib>
using namespace std;
#define N 100
typedef int KeyType;
typedef char OtherType;
typedef struct RecordType{
KeyType key;
OtherType other_data;
}type;
void Merge(type r1[],int low,int mid,int high,type r2[]){
int i=low;
int j=mid+1;
int k=low;
while((i<=mid)&&(j<=high)){
if(r1[i].key<=r1[j].key){
r2[k]=r1[i];
i++;

}
else{
r2[k]=r1[j];
j++;
}
k++;
}
while(i<=mid){
r2[k]=r1[i];
k++;
i++;
}
while(j<=high){
r2[k]=r1[j];
k++;
j++;
}
//cout<<"merge"<<endl;
}
void MSort(type r1[],int low,int high,type r3[]){
type* r2;
r2=(type* )malloc(sizeof(type)*(high-low+1));
if(low==high){

r3[low]=r1[low];
//cout<<"Msort"<<endl;
}

else{
int mid=(low+high)/2;
MSort(r1,low,mid,r2);
//cout<<"low1 "<<low<<"mid "<<mid<<endl;
MSort(r1,mid+1,high,r2);
//cout<<"low2mid "<<mid+1<<"high "<<high<<endl;
Merge(r2,low,mid,high,r3);
//cout<<"low "<<low<<"mid "<<mid<<"high  "<<high<<endl;
}
//free(r2);
}
void MergeSort(type r[],int n){
MSort(r,1,n,r);
}
int main(){
type a[N];
int n;
cin>>n;

for(int i=1;i<=n;i++)
cin>>a[i].key;
MergeSort(a,n);
for(int i=1;i<=n;i++)
cout<<a[i].key<<" ";
return 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值