代码:
//归并排序
void merger(int arry[],int l,int mid,int r)
{
int tL[100],tR[100];//一个存左边的数组一个存右边的数组
int lenl=mid-l;
int lenr=r-mid;
for(int i=0;i<lenl;++i){tL[i]=arry[l+i];}
for(int i=0;i<lenr;++i){tR[i]=arry[mid+i];}
tL[lenl]=tR[lenr]=inf;
int li=0,ri=0;
for(int i=l;i<r;++i)//每次取小的存放进去
{
if(tL[li]<=tR[ri]){arry[i]=tL[li++];}
else {arry[i]=tR[ri++];}
}
return;
}
void merger_sort(int arry[],int l,int r)//传入数组左右两个标志位
{
if(l+1>=r){return ;}
int mid=(l+r)/2;//去中间元素
merger_sort(arry,l,mid);//求左区间
merger_sort(arry,mid,r);//求右区间
merger(arry,l,mid,r);//合并区间
return ;
}
快速排序:基本思想:通过一趟排序将要排序的数据分割成独立的两部分分割点左边都是比它小的数,右边都是比它大的数。
然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
代码:
//快速排序
void quick_sort(int arry[],int l,int r)
{
if(l<r)
{
int i=l,j=r,pivot=arry[i];
while(i<j)
{
while(i<j&&arry[j]>=pivot){j--;}
if(i<j) arry[i]=arry[j];
while(i<j&&arry[i]<=pivot){i++;}
if(i<j) arry[j]=arry[i];
}
arry[i]=pivot;
quick_sort(arry,l,i);
quick_sort(arry,i+1,r);
}
}