1 快速排序是冒泡排序的一种
2 选定一个基数(通常是第一个元素),通过一趟排序,将数据分为两部分,其中一部分数据比另一部分数据都要小。
3再分别对两部分数据施以同样的算法进行分割(可用递归进行)。最终得到有序数据
代码如下
void qsort(int a[],int low,int high)
{
if(low >= high)
{
return;
}
int first = low;
int last = high;
int key = a[first];
//通过下面这个循环,将数组分成了3部分。
//low->(first-1) 全部小于key
//first 等于key
//(first+1)->high 全部大于key
while (first < last)
{
while (first < last && a[last] >= key)
{
last--;
}
/*
a[first]是第一个空位
从右边开始,将第一个比key小的数a[last]存放到左边的空位
同时a[last]成为下一个空位
*/
a[first] = a[last];
while (first < last && a[first] <= key)
{
first++;
}
/*
从左边开始,将第一个比key大的数a[first]存放到右边的空位
同时a[first]成为下一个空位
*/
a[last] = a[first];
}
a[first] = key;
//递归继续对左右两边进行排序
qsort(a,low,first-1);
qsort(a,first+1,high);
}
4 快速排序的优化。可以通过选着一个合理中值来避免最坏情况发生