归并排序
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; const int maxn=100; int A[maxn]; int T[maxn]; void mergesort(int* A,int x,int y,int* T) { if(1+x<y) //如果写成x<y将会造成死循环 { int m=x+(y-x)/2; mergesort(A,x,m,T); mergesort(A,m,y,T); int p=x,i=x,j=m; while(i<m || j<y) { if(j>=y || (i<m && A[i]<A[j])) T[p++]=A[i++]; else T[p++]=A[j++]; } for(int k=x;k<y;k++) A[k]=T[k]; } } int main() { int x=0; int y; cin>>y; for(int i=0;i<y;i++) cin>>A[i]; for(int i=x;i<y;i++) printf("%d ",A[i]); printf(" "); mergesort(A,0,y,T); for(int i=x;i<y;i++) printf("%d ",A[i]); printf(" "); return 0; }
注意递归基
void quicksort(int*A ,int x,int y) { if(x+1>=y) return; int temp=A[x]; int i=x,j=y-1; while(i!=j) { while(A[j]>=temp && j>i) j--; while(A[i]<=temp && j>i) i++; int t=A[i]; A[i]=A[j]; A[j]=t; } A[x]=A[j]; A[j]=temp; quicksort(A,x,i); quicksort(A,i+1,y); }