排序的升级笔记
本文用于记载一些有趣的排序方法,以输入20个整数排序并输出为例。
一、递归中值排序(二分法)
#include<stdio.h>
//inspaired by Y.H.Tang,BUPT
void sort(int *a,int min,int max)
{
int flag;
if(min<max)
{
flag=findflag(a,min,max);
sort(a,min,flag-1);
sort(a,flag+1,max);
}
}
int findflag(int *a,int min,int max)
{
int low=a[min],flag;
while(min<max)
{
while(a[max]>=low&&min<max) max--;
a[min]=a[max];
while(a[min]<=low&&min<max) min++;
a[max]=a[min];
}
a[min]=low;
flag=min;
return flag;
}
int main()
{
int m,i,a[20];
scanf("%d",&m);
for(i=0;i<m;i++) scanf("%d",a+i);
sort(a,0,m-1);
for(i=0;i<m;i++) printf("%d ",*(a+i));
}