python 冒泡排序 交换次数_Python实现交换排序--冒泡排序和快速排序

本文介绍了Python中的冒泡排序和快速排序算法。冒泡排序是一种稳定的排序方法,时间复杂度为O(n^2)。而快速排序在平均情况下具有O(nlogn)的时间复杂度,但不稳定。文中提供了两种排序方式的代码实现,并通过示例展示了排序过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.冒泡排序也叫起泡排序,气泡排序。

基本思路(升序为例):比较第一个和第二个,逆序(data[0]>data[1])则交换,然后比较第二个和第三个,如此下去完成第一趟排序,这样最大的元素被安排到最后一个位置n;第二趟排序对前n-1个元素进行上述操作,第二大的元素排在n-1的位置;

最大比较次数n(n-1)/2 。时间复杂度为O(n**2) 冒泡排序是稳定的。

#升序例子

def mppx(datas):

length = len(datas)

for i in range(length - 1):

for j in range(length - 1 - i):

if datas[j] > datas[j+1]:

temp = datas[j]

datas[j] = datas[j+1]

datas[j+1] = temp

print datas

#降序例子

def bubble_sort(datas):

length = len(datas)

for i in range(length - 1, 0 , -1):

for j in range(i):

if datas[j+1] > datas[j]:

temp = datas[j+1]

datas[j+1] = datas[j]

datas[j]= temp

print datas

datalist = [60,71,49,11,82,49,24,3,66]

mppx(datalist)

bubble_sort(datalist)

输出:

[3, 11, 24, 49, 49, 60, 66, 71, 82]

[82, 71, 66, 60, 49, 49, 24, 11, 3]

2.快速排序

快速排序中,记录的比较和交换从两端向中间进行,关键字较小和较大的记录一次就能换到前面或者后面,记录每次移动的距离较远,所以可以减少总的比较次数和移动次数。是目前基于比较的内部排序方法中速度最快的。

平均时间复杂度:O(nlogn),最坏情况下的时间复杂度为O(n**2)

快速排序法不稳定。例如{6,6‘,2}的排序结果为{2,6’,6}

快速排序

quick_sort = lambda array: array if len(array) <= 1 else \

quick_sort([item for item in array[1:] if item <= array[0]]) \

+ [array[0]] + \

quick_sort([item for item in array[1:] if item > array[0]])

datalist = [60,71,49,11,82,49,24,3,66]

print quick_sort(datalist)

输出:

[3, 11, 24, 49, 49, 60, 66, 71, 82]

报错。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

def quick_sort(datas):

if datas == []:

return

else:

smaller = [x for x in datas[1:] if x <= datas[0]]

bigger = [x for x in datas[1:] if x > datas[0]]

return quick_sort(smaller) + [datas[0]] + quick_sort(bigger)

datalist = [60,71,49,11,82,49,24,3,66]

print quick_sort(datalist)

参考连接:

https://blog.csdn.net/razor87/article/details/71155518

https://www.cnblogs.com/lovealways/p/6716113.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值