应老师要求,向新入队或将要入队的队员写辅导书,果断先抢了排序算法~~代码如下,全手写,留作纪念
const int MAXN=100005;
void bubble_sort(int a[],int n)//冒泡排序
{
for(int i=0; i<n-1; i++)
{
for(int j=0; j<n-1; j++)
{
if(a[j]>a[j+1])
{
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
void choose_sort(int a[],int n)//选择排序
{
for(int i=0; i<n-1; i++)
{
int k=i;
for(int j=i+1; j<n; j++)
{
if(a[k]>a[j])
k=j;
}
if(k!=i)
{
int t=a[k];
a[k]=a[i];
a[i]=t;
}
}
}
void insert_sort(int a[],int n)//插入排序
{
for(int i=1; i<n; i++)
{
int t=a[i],j;
for(j=i; j>0; j--)
{
if(t<a[j-1])
a[j]=a[j-1];
else
break;
}
a[j]=t;
}
}
int b[MAXN];
void merge(int a[],int left,int mid,int right)//归并排序Pt.1
{
int i,j,k;
i=k=left,j=mid+1;
while(i<=mid&&j<=right)
{
if(a[i]<=a[j])
b[k++]=a[i++];
else
b[k++]=a[j++];
}
while(i<=mid)
b[k++]=a[i++];
while(j<=right)
b[k++]=a[j++];
memcpy(a+left,b+left,(right-left+1)*sizeof(int));
}
void merge_sort(int a[],int left,int right)//归并排序Pt.2
{
if(left>=right)
return;
int mid=(left+right)/2;
merge_sort(a,left,mid);
merge_sort(a,mid+1,right);
merge(a,left,mid,right);
}
int partition(int a[],int left,int right)//快速排序Pt.1
{
int x=a[right],i=left-1,j;
for(j=left;j<right;j++)
{
if(a[j]<=x)
{
int t=a[++i];
a[i]=a[j];
a[j]=t;
}
}
a[right]=a[++i];
a[i]=x;
return i;
}
void quick_sort(int a[],int left,int right)//快速排序Pt.2
{
if(left>=right)
return;
int q=partition(a,left,right);
quick_sort(a,left,q-1);
quick_sort(a,q+1,right);
}
void down_adjust(int a[],int i,int n)//堆排序Pt.1
{
int l=2*i,r=2*i+1;
while(l<=n)
{
if(r<=n&&a[r]>a[l])
l=r;
if(a[i]<a[l])
{
int t=a[i];
a[i]=a[l];
a[l]=t;
}
i=l;l=2*i;r=2*i+1;
}
}
void build_heap(int a[],int n)//堆排序Pt.2
{
for(int i=n/2;i>=1;i--)
down_adjust(a,i,n);
}
void heap_sort(int a[],int n)//堆排序Pt.3,数组序号从1开始
{
build_heap(a,n);
for(int i=n;i>=2;i--)
{
int t=a[1];
a[1]=a[i];
a[i]=t;
down_adjust(a,1,i-1);
}
}