void quick_sort(int q[], int l, int r) { if (l >= r) return; int x = q[(i+j+1)/2], i = l - 1, j = r + 1; while (i < j) { do i++; while (q[i] < x); do j--; while (q[j] > x); if (i < j) swap(q[i], q[j]); } quick_sort(q, l, i-1); quick_sort(q, j + 1, r); }
1
if (l >= r) return;
首先进行边界判断,如果指针不同则直接退出
1 2 3 4 5
while (i < j) { do i++; while (q[i] < x); do j--; while (q[j] > x); if (i < j) swap(q[i], q[j]); }
循环判断左右两边如果数值大于设置的中间值,则进行左右两边的数据交换
1 2
quick_sort(q, l, i-1); quick_sort(q, j + 1, r);
不断进行递归来不断地分区的将左右两边的数据进行换算,不断重复
代码模板
1 2 3 4 5 6 7 8 9 10 11
void quick_sort(int q[], int l, int r) { if (l >= r) return; int x = q[(i+j+1)/2], i = l - 1, j = r + 1; while (i < j) { do i++; while (q[i] < x); do j--; while (q[j] > x); if (i < j) swap(q[i], q[j]); } quick_sort(q, l, i-1); quick_sort(q, j + 1, r); }
1
if (l >= r) return;
首先进行边界判断,如果指针不同则直接退出
1 2 3 4 5
while (i < j) { do i++; while (q[i] < x); do j--; while (q[j] > x); if (i < j) swap(q[i], q[j]); }