快速排序由于排序效率在同为o(n*logn)的几种排序方法中效率较高,因此经常被采用。
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
立即学习“Python免费学习笔记(深入)”;
现在通过一个实例来说明快排。
比如有一个数组:
6 2 4 5 3
登录后复制
第一步:选取一个基准数,不要被这个名词吓到了,你可以把它看作是一个比较大小的数,因为排序就是比较大小,
比如我选取最后一个数3为基准数,依次把数组的数和3比较,比3小的放左边,比3大的放右边,这样有如下结果:
2 3 6 4 5
登录后复制
第二步:判断区间个数,经过第一步后左边区间只有一个数了,没有数字再和它比较了,因此不需要重复操作,右边区间还有:
6 4 5
登录后复制
重复第一步,选取5作为基准数,得到比较结果:
4 5 6
登录后复制
这样左右两边区间都只有一个数了,这就标志着排序完成,最后把所有区间合并就得到排序结果:
2 3 4 5 6
登录后复制
def quick_sort(array): less = []; greater = [] if len(array)print quick_sort(list)登录后复制
[1, 2, 2, 4, 6, 7, 8]登录后复制
相比C、C#、JAVA之类的是不是简单多了^.^
TIP:去重的快速排序
如下, 只需要把集合修改为单值元素,这里我们使用Python3来演示:# -*- coding: utf-8 -*- import random L = [2, 3, 8, 4, 9, 5, 6, 5, 6, 10, 17, 11, 2] def qsort(L): if len(L) pivot_element] return qsort(small) + [pivot_element] + qsort(large) print(qsort(L))登录后复制
输出:
[2, 3, 4, 5, 6, 8, 9, 10, 11, 17]登录后复制
也可以直接使用, 集合(set)进行排序和去重.
mylist = list(set(L)) #集合自动排序字符串登录后复制
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2286104.html
赞 (0)