0001|快速排序
对于一个数组的快速排序,有暴力的快速排序,以下是代码的实现:
#include <cstdio>
#include <iostream>
using namespace std;
const int N = 1e6;
int n;
int q[N];
void quick_sort(int q[], int l, int r)
{
if(l>r) return;
int x=q[l], 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, j);
quick_sort(q, j+1, r);
}
int main()
{
scanf("%d", &n);
for(int i = 0; i <n; i++) scanf("%d", &q[i]);
quick_sort(q, 0, n-1);
for(int j = 0; j <n; j++) printf("%d ", q[j]);
return 0;
}
数组的排序思想
利用递归的方法,对于一个数组中的数,可以列为在数轴上的数,利用指针的思想,我们可以把头和尾部的数,作为i和j的起点,分别的++进行靠拢排序。
以'x = q[l]'作为枢轴,这样对于比x大的数排成一部分,比x小的数排成一部分,在利用递归的思想,我们就可以将所有的数,排列。
在递归期间,swap函数,只是更换了数值,并不是更换地址位置,do-while函数,完全的避免了边界问题。
在更换位置后,其 i 和 j 的值是不变的,在外部的while的条件下可以再次进行循环,使得数轴上的值完全的向着 小于枢轴 大于枢轴的目标移动。