快排 python简洁版_Python实现快速排序算法及去重的快速排序的简单示例

本文介绍了Python实现快速排序算法的详细步骤,并展示了如何通过快速排序进行数据去重。示例代码清晰易懂,包括标准快速排序和去重快速排序的实现,以及使用集合进行排序和去重的方法。
摘要由CSDN通过智能技术生成

Python实现快速排序算法及去重的快速排序的简单示例

发布于 2016-07-31 09:13:32 | 152 次阅读 | 评论: 0 | 来源: 网友投递

Python编程语言Python 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。

quick sort快速排序是一种再基础不过的排序算法,使用Python代码写起来相当简洁,这里我们就来看一下Python实现快速排序算法及去重的快速排序的简单示例:

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用。

该方法的基本思想是:

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数。

现在通过一个实例来说明快排。

比如有一个数组:

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) <= 1:

return array

pivot = array.pop()

for x in array:

if x <= pivot: less.append(x)

else: greater.append(x)

return quick_sort(less) + [pivot] + quick_sort(greater)

list = [2,4,2,6,7,8,1]

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)<2: return L

pivot_element = random.choice(L)

small = [i for i in L if i< pivot_element]

#medium = [i for i in L if i==pivot_element]

large = [i for i in L if i> 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)) #集合自动排序字符串

相关阅读:

Python实现快速排序算法及去重的快速排序的简单示例

Python利用正则表达式匹配并截取指定子串及去重的方法

Python实现快速排序和插入排序算法及自定义排序的示例

python实现bucket排序算法实例分析

Python实现各种排序算法的代码示例总结

Python实现八大排序算法

Python做文本按行去重的实现方法

python实现八大排序算法(2)

python实现八大排序算法(1)

Python实现嵌套列表及字典并按某一元素去重复功能示例

python列表去重的二种方法

python中对list去重的几种方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值