这是我第一次写博客,快排大家都知道,是排序算法中特别重要的算法,去年的数据结构与算法中就有所涉及,当时才疏学浅,直到现在,才有了自己的见解。
快排属于分治算法的一种,可以分为三个步骤执行:
1. 分成子问题
2. 递归处理子问题
3. 子问题合并
void quick_sort(int a[], int l, int r)
{
//终止条件的判断
if (l >= r)return;
//分成子问题
int i = l - 1, j = r + 1, x = a[r + l >> 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);
}
在快排中,由于直接在输入的数组上进行处理,所以不需要进行第三步,但这个对归并排序来说尤其重要。