排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。本文主要讲述python中经常用的三种排序算法,选择排序法,冒泡排序法和插入排序法及其区别。通过对列表里的元素大小排序进行阐述。
选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。
不知道为什么图片上传不了,请点击下方阅读原文
def selectionSort(arr):
# 求出arr的长度
n = len(arr)
# 外层循环确定比较的轮数,x是下标,arr[x]在外层循环中代表arr中所有元素
for x in range(n - 1):
# 内层循环开始比较
for y in range(x + 1, n):
# arr[x]在for y 循环中是代表特定的元素,arr[y]代表任意一个arr任意一个元素。
if arr[x] > arr[y]:
# 让arr[x]和arr列表中每一个元素比较,找出小的
arr[x], arr[y] = arr[y], arr[x]
return arr
print(selectionSort([1, 3, 1, 4, 5, 2, 0]))
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来说并没有什么太大作用。
不知道为什么图片上传不了,请点击下方阅读原文
def bubbleSort(arr):
n = len(arr)
for x in range(n - 1):
for y in range(n - 1 - x):
if arr[y] > arr[y + 1]:
arr[y], arr[y + 1] = arr[y + 1], arr[y]
return arr
print(bubbleSort([1, 3, 1, 4, 5, 2, 0]))
插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。
2. 动图演示
不知道为什么图片上传不了,请点击下方阅读原文
def insertionSort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and key < arr[j]:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
return arr
print(insertionSort([1, 3, 1, 4, 5, 2, 0]))
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有