主要参考的是http://blog.csdn.net/morewindows/article/details/6684558
代码如下
void quick_sort(int s[], int l, int r)
{
if(l < r)
{
//以l作为基准值
int i = l, j = r, x = s[l];
while(i < j)
{
//从后向前找,找到第一个比x小的
while(i < j)
{
if(s[j] < x)
{
s[i] = s[j];
break;
}
j--;
}
//从前向后找,找到第一个比x大的
while(i < j)
{
if(s[i] > x)
{
s[j] = s[i];
break;
}
i++;
}
//i保存了当前的坑的位置
}
s[i] = x;
quick_sort(s, l, i-1);
quick_sort(s, i+1, r);
}
}
快排的主要思想就是一次确定一个数的位置,然后把问题规模变小,分别进行处理以达到每个区间有序。
那么如何确定一个数该在的位置呢?通过从后往前扫描,然后从前往后扫描,并重复这两个步骤实现。