归并排序
来源:互联网 发布:老干部网络意思 编辑:程序博客网 时间: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]<<",";
}
}
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]<<",";
}
}
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 蓝桥杯(概率题)
- Java的初始化顺序
- mysql-connector移植到mini2440
- Ubuntu JDK1.6 安装
- VS2010/MFC编程入门教程之目录和总结
- 归并排序
- 安卓模拟器上安装卸载apk文件教程
- Nutch抓取数据内容的详解
- 第三届蓝桥杯预选赛试题及答案
- xargs的用法-wiki
- C++ 文本字串处理
- Weka开发[-1]——在你的代码中使用Weka
- 无线信道中各种衰落的分类
- 问题一百二十二:排序