归并排序:
上机无聊中,来写写经典的归并排序.一种典型的分治算法,一段连续的数据,可以采用局部分治排序在2路合并,最终得到排序后的结果.
需要开辟一个辅助数组来保存数据。
代码如下:
//归并排序
#include <iostream>
using namespace std;
void Merger(int a[],int left,int mid,int right,int temp[]);
void Sort(int a[],int left,int right,int temp[])
{
if(left<right)
{
int mid=(left+right)/2;
Sort(a,left,mid,temp);
Sort(a,mid+1,right,temp);
Merger(a,left,mid,right,temp);
}
}
void Merger(int a[],int left,int mid,int right,int temp[])
{
int i=left,j=mid+1,k=left;
while (i<=mid&&j<=right)
{
if(a[i]<a[j])
{
temp[k++]=a[i]; i++;
}
else
{
temp[k++]=a[j]; j++;
}
}
while (i>mid&&j<=right)
{
temp[k++]=a[j++];
}
while (i<=mid&&j>right)
{
temp[k++]=a[i++];
}
for(j=left;j<k;++j)
a[j]=temp[j];
}
int main()
{
cout<<"归并排序测试"<<endl;
cout<<"请输入待排序的个数"<<endl;
int n;
cin>>n;
int a[1000];
cout<<"请输入元素成员"<<endl;
for(int k=0;k<n;++k)
cin>>a[k];
int *temp=new int[1000];
Sort(a,0,n-1,temp);
for(int k=0;k<n;++k)
cout<<a[k]<<" ";
delete []temp;
system("pause");
return 0;
}