堆排序
void heapjust(int x,int len)//大顶堆 { int i,num; num = p[x]; for(i = 2*x;i <= len;i *= 2) { if(i+1 <= len&&p[i] < p[i+1]) i ++; if(num > p[i]) break; p[x] = p[i]; x = i; } p[x] = num; } void heapbuild() { int i,t; for(i = n/2;i >= 1;i --) { heapjust(i,n); } for(i = n;i >= 1;i --) { t = p[1]; p[1] = p[i]; p[i] = t; heapjust(1,i-1); } }
快排
1 void qsort(int l,int r) 2 { 3 int x = l,y = r,key = p[l]; 4 if(x >= y) return; 5 while(x < y) 6 { 7 while(x < y&&p[y] >= key)y--; 8 p[x] = p[y]; 9 while(x < y&&p[x] <= key)x++; 10 p[y] = p[x]; 11 } 12 p[x] = key; 13 qsort(l,x-1); 14 qsort(x+1,r); 15 }
归并
1 int p[100001],o[100001]; 2 void merge(int L,int R) 3 { 4 int m,i,j,k; 5 m = (L + R) >> 1; 6 if(L >= R) return ; 7 merge(L,m); 8 merge(m+1,R); 9 for(i = L,j = m+1,k = L; k <= R; k ++) 10 { 11 if(j == R+1) 12 o[k] = p[i++]; 13 else if(i == m+1) 14 o[k] = p[j++]; 15 else if(p[i] > p[j]) 16 o[k] = p[i++]; 17 else 18 o[k] = p[j++]; 19 } 20 for(i = L; i <= R; i ++) 21 p[i] = o[i]; 22 }
原文:http://www.cnblogs.com/local8080/p/3614524.html