您的位置:首页 > 其它

排序算法-------归并排序

2011-10-03 12:39 218 查看
基本思想:将元素集合分成2个集合,对每个集合单独分类,然后将已分类的两个序列归并成一个含有n个元素的分类好的序列。这种思想是典型的分治法的设计思想。

归并排序

#include <iostream>
using namespace std;

//元素交换
void swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}

/*///////////////////////////////////////////////
归并排序
*/
void Merge(int *a,int low,int mid,int high)
{
int b[100];
int l=low;
int h=mid+1;
int i=low;
int j;
while( l<=mid && h<=high )       //当分成的独立的两部分各自未超过范围时,比较元素,赋值给数组b中相应的元素
{
if(a[l]<=a[h])
b[i++]=a[l++];
else
b[i++]=a[h++];
}
if(l>mid)                     //当超出范围,判断是哪一部分先超出,然后将剩余部分直接添加到数组b中
for(j=h;j<=high;j++)
b[i++]=a[j];

if(h>high)
for(j=l;j<=mid;j++)
b[i++]=a[j];

for(j=low;j<=high;j++)        //重写数组a中元素
a[j]=b[j];
}
void MergeSort(int *a,int low,int high)     //递归,合并排序
{
if(low<high)
{
int mid=(low+high)/2;
MergeSort(a,low,mid);
MergeSort(a,mid+1,high);
Merge(a,low,mid,high);
}
}

/////////////////////////////////////////////////

int main()
{
int n,i,a[20];
cout<<"请输入数组元素n:"<<endl;
cin>>n;
cout<<"请输入"<<n<<"个元素:"<<endl;
for(i=0;i<n;i++)
cin>>a[i];
MergeSort(a,0,n-1);
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: