#include<iostream>
using namespace std;
/*insertion sort 2015/1/8 */
void insertsort(int a[],int length)
{
for(int j=1;j<length;j++)
{
int key=a[j];
int i=j-1;
while(i>=0&&a[i]>key)
{
a[i+1]=a[i];
i--;
}
a[i+1]=key;
}
return;
}
/*merge sort 2015/1/8*/
void merge(int *a,int bottom,int middle,int top)
{
int length=top-bottom+1;
int i1=bottom;
int i2=middle+1;
int i=0;
int *temp=0;
temp=(int*)malloc(sizeof(int)*length);//存储合并的数组
while(i1<=middle&&i2<=top)//比较左右两边的元素
{
if(a[i1]<a[i2])
{
temp[i++]=a[i1++];
}
else
{
temp[i++]=a[i2++];
}
}
for(;i1<=middle;i1++)//若数组左边有剩余,则把剩余的元素copy到temp数组中
{
temp[i++]=a[i1];
}
for(;i2<=top;i2++)//若数组右边有剩余,则把剩余的元素copy到temp数组中
{
temp[i++]=a[i2];
}
for(int j=0;j<i;j++)
{
a[bottom+j]=temp[j];
}
}
void mergesort(int *a,int bottom,int top)
{
if(bottom<top)
{
int middle=(top+bottom)/2;
mergesort(a,bottom,middle);
mergesort(a,middle+1,top);
merge(a,bottom,middle,top);
}
return;
}
int main()
{
int a[20]={12,5,78,45,1,3,26,14,12,45,14,54,78,123,4,0,78,78,6,9};
//int a[10]={12,5,78,45,1,3,3,6,8,34};
int length=sizeof(a)/sizeof(int);
cout<<"排序前:";
int i=0;
for(;i<length;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
insertsort(a,length);
// mergesort(a,0,length-1);
cout<<"排序后:";
i=0;
for(;i<length;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
cout<<"sizeof(a): "<<sizeof(a)<<endl;
return 0;
}
参考:http://blog.csdn.net/xyd0512/article/details/8210259