简单模板
void quick_sort(int a[], int l, int r)
{
if (l >= r) return;
int i = l - 1, j = r + 1;
int x = a[l + r >> 1];
while (i < j)
{
do i++;
while (a[i] < x);
do j--;
while (a[j] > x);
if (i < j) swap(a[i], a[j]);
}
quick_sort(a, l, j);
quick_sort(a, j + 1, r);
}
注意:
- 要先
i++j--是因为有可能a[i] = a[j] = x - 若用
quick_sort(a, l, i - 1)quick_sort(a, i, r)则x = a[l + r + 1 >> 1]
用i时x不能取左边界,用j时 不能取右边界
例如:序列3 4,若用i且x = a[l + r >> 1],会陷入死循环
本文深入讲解了快速排序算法的实现细节,包括递归调用的边界条件和优化技巧,如如何选择基准元素以及避免死循环的方法。通过具体的代码示例,帮助读者理解快速排序的工作原理。
760

被折叠的 条评论
为什么被折叠?



