快速排序方法的简单解释

实在是看不懂书上的讲解啊
有没有人可以简单易懂的解释一下?
比如下面这个数列吧
70,75,82,90,23,16,10,68
如果用快速排序步骤是什么?
多谢了~

快排的思想是(假设都是从小到大排列):
选一个值作为“轴值”,所有小于轴值的都移动到轴值左边,所有大于轴值的都移动到轴值右边。这一步是让数列变得较为有序
然后分别再对轴值的左边、右边分别进行快排,一步一步提高整个数列的有序程度,直到最后完全有序。

轴值的选取有多种方式,这里就假设是选正中间的一个
70,75,82,90,23,16,10,68
选择轴值 90,排列后得到:
70,75,82,23,16,10,68,(90)
括号括起来的我表示是轴值,这里运气不好,轴值选中了一个最大的

下面对轴值左边排序,在选择轴值为23:
16,10,(23),70,75,82,68

再分别对16, 10 和 70,75,82,68进行排序

一般快排在待排序的数字个数较少时,会选取其它排序来进行排列,比如插入排序。这里16,10数字个数已经太少,用插入排序排成10, 16

然后对 70,75,82,68进行排序……

整个排序过程就这样
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-22
最快的是二分法(运算速度最快),最简单的事冒泡法。
二分法为例:从两端选取各自草中间靠拢,每次排除最大的,或者最小的。这种方法在算法上是较快的。
冒泡法就是:从[0]到[n],第一次让[0]和后面的所有数字相比较,小的就换给[0]。第二次[1]和后面的比较小的就换给[1]………………以此类推,得出从小到大的排列了……他和沉底法是一样的道理只不过一个向上一个向下
第2个回答  2012-03-27
#include <sdtio.h>
int cmp(const void*x,const void*y)
{
return *(int*)x-*(int*)y;
}
int main()
{
int a[8]={70,75,82,90,23,16,10,68};
qsort(a,8,sizeof(int),cmp);
for(i=0;i<8;i++)
printf("%d\n",a[i]);
return 0;
}
qsort中的a表示数组名名字也是数组第一个元素的地址,8表示待排元素的个数,sizeof(int)表示元素类型,如果是char数组,就用sizeof(char),cmp是个函数,返回两两数的差,这样是递增排序,若要递减,把cmp的return相减的两个数调换即可
第3个回答  2019-09-21

快速排序的原理和实现(纯白话文口述)

看看这个博客,讲的很透彻,通俗易懂,望对你有用