归并排序

来源:互联网 发布:老干部网络意思 编辑:程序博客网 时间:2024/06/06 20:57
#include<iostream>
using namespace std;




void merge(int *data,int p,int r,int q)
{
int *left = NULL;
int *right = NULL;
int n1 = r-p+1;
int n2 = q-r;
left = (int*)malloc(sizeof(int)*(n1));
right = new int[n2];
for(int i=0;i<n1;i++)//对左数组赋值  
{
left[i] = data[p+i];
}
for(int i=0;i<n2;i++)//对右数组赋值  
{
right[i] = data[r+1+i];
}
int i = 0;
int j = 0;
int k = p;
while(i<n1 && j<n2) //将数组元素值两两比较,并合并到data数组 
{
if(left[i]<=right[j])
{
data[k++] = left[i++];
}
else
{
data[k++] = right[j++];
}
}


for(;i<n1;i++)//如果左数组有元素剩余,则将剩余元素合并到data数组 
{
data[k++] = left[i];
}


for(;j<n2;j++)//如果右数组有元素剩余,则将剩余元素合并到data数组
{
data[k++] = right[j];
}
}


void mergesort(int *data,int p,int q)
{
int r;
if(p<q)//只有一个或无记录时不须排序  
{
r = (int)((p+q)/2);//将data数组分成两半  
mergesort(data,p,r);//递归拆分左数组  
mergesort(data,r+1,q);//递归拆分右数组  
merge(data,p,r,q); //合并数组 
}
}


void main()
{
int n;
cout<<"input array number:";
cin>>n;
int *data = new int[n];
cout<<"input array:";
for(int i=0;i<n;i++)
{
cin>>data[i];
}
mergesort(data,0,n-1);
cout<<"after sort:";
for(int i=0;i<n;i++)
{
cout<<data[i]<<",";
}


}
原创粉丝点击