python 冒泡排序 交换次数_(Python)交换排序(气泡排序、快速排序),冒泡排序...

本文介绍了Python中的两种交换排序算法:冒泡排序和快速排序。冒泡排序通过相邻元素比较并交换实现排序,时间复杂度为O(n^2)。快速排序则采用分治策略,通过选定参考点划分数据,最终达到排序目的。
摘要由CSDN通过智能技术生成

交换排序 ——

冒泡排序

基本思想:从一端开始,逐个比较相邻的两个元素,发现倒序即交换。这里按从后往前(从下往上)逐个比较相邻元素。

数组冒泡排序过程

def bubbleSort(arr):

n = len(arr)

# 遍历所有数组元素

for i in range(n):

# Last i elements are already in place

for j in range(0, n - i - 1):

# 与相邻元素比较,不对就交换

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

arr[j], arr[j + 1] = arr[j + 1], arr[j]

if __name__ == '__main__':

arr = [64, 34, 25, 12, 22, 11, 90]

bubbleSort(arr)

print("排序后的数组:")

for i in range(len(arr)):

print("%d" % arr[i]),

时间复杂度为O(

9be1c62d18abdf686d8ed6079a313a82.gif

)

ff69a0b7fb7369e7e32ee89d3e3f219d.png

交换排序 ——

快速排序

基本思想:

将数据划分为两部分,左边的所有元素都小于右边的所有元素;然后,对左右两边进行快速排序。

划分方法:

选定一个参考点(

中间元素

),所有元素与之相比较,小的放左边,大的放右边。

具体划分方法:

选择第一个元素作为中间元素。

划分:

(1)先保存该元素的值到其它位置,腾出其空间。

(2)从后往前搜索一个比中间数小的元素,并将其放置到前面的这个空位上。

(3)从前往后搜索一个比中间数大的元素,并将其放置到后面的这个位置上。

重复(2),(3),直到两边搜索的空位重合

此时将中间元素放在该空位中。

数组快速排序过程演示

3948a430ac540f2fc503b82c2d62dbdd.png

快速排序的应用

将一组数奇偶分开

不利用全部排序而求出数组中第10

个元素

def partition(L, left, right):

pivotkey = L[left]

while left < right:

# 从右到左,数出小于 pivotkey 的,放左边

while left < right and L[right] >= pivotkey:

right -= 1

L[left] = L[right]

# 从左到右,数出大于 pivotkey 的,放右边。

while left < right and L[left] <= pivotkey:

left += 1

L[right] = L[left]

# 最后剩下的那个空位置放 pivotkey

L[left] = pivotkey

return left

# arr[] --> 排序数组

# low --> 起始索引

# high --> 结束索引

# 快速排序函数

def quickSort(arr, low, high):

if low < high:

pi = partition(arr, low, high)

quickSort(arr, low, pi - 1)

quickSort(arr, pi + 1, high)

if __name__ == '__main__':

arr = [10, 7, 8, 9, 13, 5]

n = len(arr)

quickSort(arr, 0, n - 1)

print("排序后的数组:")

for i in range(n):

print("%d" % arr[i])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值