三路快排和选择
July 26th, 2014, Saturday
quicksort three partition
C
void qsort_3part(Item a[], int l, int r) {
if (r <= l) return;
int i = l, j = r+1, p = l, q = r+1, k;
Item v = a[l];
while (i < j) {
while (a[++i] < v);
while (v < a[--j]);
if (i < j) {
exch(a[i], a[j]);
if (a[i] == v) {
p++;
exch(a[p], a[i]);
}
if (a[j] == v) {
q--;
exch(a[q], a[j]);
}
}
}
exch(a[j], a[l]);
i = j-1;
j = j+1;
for (k = l+1; k <= p; k++, i--) exch(a[k], a[i]);
for (k = r; k >= q; k--, j++) exch(a[k], a[j]);
qsort_3part(a, l, i);
qsort_3part(a, j, r);
}JS
Select
no recursion version
check function
Last updated