快速排序模板
伪代码(算法导论(原书第3版)P95):
QUICKSORT(A, p, r) //A为数组,若需排序数组A全部元素,即QUICKSORT(A, 1, A.length)
1 if p < r 2 q = PARTITION(A, p, r) 3 QUICKSORT(A, p, q-1) 4 QUICKSORT(A, q+1, r)
PARTITION(A, p, r)
1 x = A[r] 2 i = p-1 3 for j = p to r-1 4 if A[j] <= x 5 i = i+1 6 exchange A[i] with A[j] 7 exchange A[i+1] with A[r] 8 return i + 1
随机化:
RANDOMIZED-PARTITION(A, p, r)
1 i = RANDOM(p, r) 2 exchange A[r] with A[i] 3 return PARTITION(A, p, r)
RANDOMIZED-QUICKSORT(A, p, r)
1 if p < r 2 q = RANDOMIZED-PARTITION(A, p, r) 3 QUICKSORT(A, p, q-1) 4 QUICKSORT(A, q+1, r)
C++:
void Quicksort(int a[], int l, int r){ if(l < r){ int p = Partition(a, l, r); Quicksort(a, l, p-1); Quicksort(a, p+1, r); } }
int Partition(int a[], int l, int r){ int x = a[r]; int i = l-1; for(int j = l; j <= r-1; j++){ if(a[j] <= x){ i++; swap(a[i], a[j]); } } swap(a[i+1], a[r]); return i+1; }
浙公网安备 33010602011771号