Đang tải…
Đang tải…
Phân hoạch 'quốc kỳ Hà Lan' của Dijkstra chia thành <, = và > chốt trong một lượt, nên các khóa trùng nhau xong ngay.
Bắt đầu quicksort ba chiều.
1void sort(int[] a, int lo, int hi) {2 if (lo >= hi) return;3 int pivot = a[lo], lt = lo, i = lo + 1, gt = hi;4 while (i <= gt) {5 if (a[i] < pivot) swap(a, lt++, i++);6 else if (a[i] > pivot) swap(a, i, gt--);7 else i++; // các phần tử trùng nhau chốt ở đây — không bao giờ đệ quy vào8 }9 sort(a, lo, lt - 1);10 sort(a, gt + 1, hi);11}