网上看了各种排序,想实现几种nlogn 的,以备不时之需
以下C嘎嘎归并排序代码
using namespace std;
void merge(int *a,int first,int mid,int last,int *temp)
{
int i=first,j=mid+1;
int m=mid,n=last;
int k=0;
while(i<=m&&j<=n)
{
if(a[i]<a[j])
temp[k++]=a[i++];
else
temp[k++]=a[j++];
}
while(i<=m)
temp[k++]=a[i++];
while(j<=n)
temp[k++]=a[j++];
for(i=0;i<k;i++)//注意这个地方要是k,千万不能用last+1,因为last 是参数,变量
a[first+i]=temp[i];
for( int i=0;i<6;i++)
cout<<a[i]<<" ";
cout<<endl;
}
void mergesort(int *a,int first,int last,int *temp)
{
if(first<last)
{
int mid=(first+last)/2;
mergesort(a,first,mid,temp);
mergesort(a,mid+1,last,temp);
merge(a,first,mid,last,temp);
}
}
int main()
{
int a[6]={6,5,4,3,2,1};
int *p=new int[6];
mergesort(a,0,5,p);
for( int i=0;i<6;i++)
cout<<a[i]<<" ";
delete [] p;
}