快速排序方法的简单解释

实在是看不懂书上的讲解啊有没有人可以简单易懂的解释一下?比如下面这个数列吧70,75,82,90,23,16,10,68如果用快速排序步骤是什么?多谢了~... 实在是看不懂书上的讲解啊
有没有人可以简单易懂的解释一下?
比如下面这个数列吧
70,75,82,90,23,16,10,68
如果用快速排序步骤是什么?
多谢了~
展开
 我来答
roaming_sheep
推荐于2018-08-13 · TA获得超过699个赞
知道小有建树答主
回答量:589
采纳率:0%
帮助的人:694万
展开全部
快排的思想是(假设都是从小到大排列):
选一个值作为“轴值”,所有小于轴值的都移动到轴值左边,所有大于轴值的都移动到轴值右边。这一步是让数列变得较为有序
然后分别再对轴值的左边、右边分别进行快排,一步一步提高整个数列的有序程度,直到最后完全有序。

轴值的选取有多种方式,这里就假设是选正中间的一个
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进行排序……

整个排序过程就这样
对抗A范越
2012-03-22 · 超过10用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:24.6万
展开全部
最快的是二分法(运算速度最快),最简单的事冒泡法。
二分法为例:从两端选取各自草中间靠拢,每次排除最大的,或者最小的。这种方法在算法上是较快的。
冒泡法就是:从[0]到[n],第一次让[0]和后面的所有数字相比较,小的就换给[0]。第二次[1]和后面的比较小的就换给[1]………………以此类推,得出从小到大的排列了……他和沉底法是一样的道理只不过一个向上一个向下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
w与FS
2012-03-27
知道答主
回答量:29
采纳率:0%
帮助的人:11.9万
展开全部
#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相减的两个数调换即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ywm070508
2019-09-21 · 超过14用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:19.4万
展开全部

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

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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式