排序
一.快速排序 时间复杂度:平均 nlogn 最坏 n2 空间:n
int a[N]; int cmp(int x,int y) { return x<y;//递增 或 return x>y;//递减 } sort(a+1,a+1+n,cmp); struct node { int a,b; }e[N]; int cmp(node x,node y) { return x.a<y.a;//以a为关键字,递增 或 return x.a>y.a;//以a为关键字,递减 } sort(e+1,e+1+n,cmp);
二.归并排序 时间复杂度:nlogn 很稳定哦 空间复杂度:n/2 + logn,约为n
1 void mergesort(int left,int right) 2 { 3 if(left==right)return; 4 int mid=(left+right)>>1; 5 mergesort(left,mid);mergesort(mid+1.right); 6 int i=left,j=mid+1,p=left; 7 while(i<=mid&&j<=right) 8 { 9 if(a[i]>a[j])temp[++p]=a[++i]; 10 else temp[++p]=a[++j]; 11 } 12 while(i<=mid)temp[++p]=a[++i]; 13 while(j<=right)temp[++p]=a[++j]; 14 for(i=left;i<=right;++i)a[i]=temp[i]; 15 }
三.冒泡排序
1 for(int i=1;i<=n;++i) 2 for(int j=1;j<n-1i;++j) 3 if(a[j]>a[j+1])swap(a[j],a[j+1]);