应老师要求,向新入队或将要入队的队员写辅导书,果断先抢了排序算法~~代码如下,全手写,留作纪念
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); } }