前言

排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。本文主要讲述python中经常用的三种排序算法,选择排序法,冒泡排序法和插入排序法及其区别。通过对列表里的元素大小排序进行阐述。

一、选择排序法

选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。

1. 算法步骤首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

重复第二步,直到所有元素均排序完毕

2. 动图演示

3. Python 代码实现

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,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来说并没有什么太大作用。

1. 算法步骤比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

2. 动图演示

3. Python 代码实现

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]))

三、插入排序法

插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。

1. 算法步骤将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

2. 动图演示

3. Python 代码实现

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]))

python中怎么比较两个列表的大小_python中对列表元素大小排序(冒泡排序法,选择排序法和插入排序法)—排序算法...相关推荐

  1. python中对列表元素大小排序(冒泡排序法,选择排序法和插入排序法)—排序算法

    前言 排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列.本文主要讲述python中经常用的三种排序算法,选择排序法 ...

  2. 黑盒测试技术中的等价类划分法、边界值分析法、因果图法和决策表法进行测试用例设计

    一.实验目的 1.能熟练应用黑盒测试技术中的等价类划分法.边界值分析法.因果图法和决策表法进行测试用例设计. 2.对测试用例进行优化设计 二.实验环境 Windows系统+ Office工具 三.实验 ...

  3. python中如何将两个列表进行合并_Python中如何把两个list合并,并按从小到大顺序排列?...

    本题分为两个部分:一个是list的合并,一个是用while loop循环将合并后的数组从小到大进行排序--排序问题. 1. List的合并: list的合并其实非常简单,只需要用"+&quo ...

  4. python求列表的中位数_python中获取中位数的两种方法

    普通方法: 对列表进行排序,然后根据长度为奇数或者偶数的不同情况计算中位数 def huahua(x): length = len(x) print(length) x.sort() print(x) ...

  5. python列表切片得到的是列表还是字符串_python中列表的切片问题 python arry怎么取列切片...

    python 列表切片赋值 对列表切片进行赋值,解释器处理时是直接将序列中的内容赋值过去的 ,还切片赋值,得到的与原变量无关,是两个不同的对象:直接赋值,引用的是同一个对象. 请看下例 切片赋值. a ...

  6. python列表对象相同_Python中的学习列表对象,List

    List(列表) 是 Python 中使用最频繁的数据类型. 列表可以完成大多数集合类的数据结构实现.列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套). 列表是写在方括号 [ ...

  7. python中的可变数据类型有列表和元组_Python中列表的 += 和 .extend() 的异同

    一道Python题 最近有朋友"考"了我一个Python的题:使用+=和.extend()两种方法扩展元组中的列表会发生什么.虽然我对Python中的可变数据类型.不可变数据类型的 ...

  8. python中不能使用下标运算的有哪些_Python中最常见的10个问题(列表)

    列表是Python中使用最多的一种数据结果,如何高效操作列表是提高代码运行效率的关键,这篇文章列出了10个常用的列表操作,希望对你有帮助. 注意:很多人学Python过程中会遇到各种烦恼问题,没有人帮 ...

  9. python只能对列表进行切片_Python中的列表

    1. 列表的创建 列表(list)是Python中一个非常重要的类型,用于管理一组数据,列表的形式如下所示 country = ['China', 'Germany', 'Russia', 'Amer ...

最新文章

  1. VS 打开No EditorOptionDefinition export found for the given option name问题解决
  2. 「SAP技术」SAP 如何看序列号被包在哪些HU里?
  3. iOS:自己写的一个星级评价的小Demo
  4. android 相机路径,android – 如何获取刚从相机捕获的图像路径
  5. VueJS ajax综合案例
  6. netframework 4.0内置处理JSON对象
  7. oracle出现12505错误的解决步骤
  8. BAT54C不断电源保护电路
  9. 实战 Flutter 象棋从零到上架
  10. 基于深度图像的手势识别算法研究
  11. JavaSE基础20笔记IO流
  12. 基于Python 实现 Spirent TestCenter 自动化
  13. 【数据结构与算法】动态规划
  14. 曲阜水利学校计算机96级聚会,曲阜水利学校50年校庆
  15. 微信小程序网易云音乐轮播图右侧留白
  16. 申请高新技术企业认定需要多少专利?
  17. 个人开公司的流程,以后用得着
  18. 几何画板领衔起跑,提前启动双十一!
  19. 最强大的代码编辑器(IDE)——Atom。Atom介绍安装与插件配置(一)
  20. endnote参考文献排版_Endnote 导入参考文献的时候,格式错误太多了。是否有什么解决办法?...

热门文章

  1. [转载]设计模式解密(23) - 总结篇
  2. 100个最古老互联网域名 最久只有23年(附名单)
  3. OpenAI发布CLIP模型快一年了,盘点那些CLIP相关让人印象深刻的工作
  4. 经典重温:FAIR提出SlowFast,用双分支非对称网络处理不同采样率的视频!代码开源!...
  5. CVPR 2021奖项出炉:最佳论文花落马普所,何恺明获提名,首届黄煦涛纪念奖颁布...
  6. 简单粗暴的多目标跟踪神器 – DeepSort
  7. 商汤研究院-SpringAutoML团队招聘啦~
  8. WAIC开发者日倒计时一天,收藏好这份完整日程
  9. Python自学真的可以学好嘛?
  10. 【python教程入门学习】用Python制作迷宫GIF