深入分析python 排序


Posted in Python onAugust 24, 2020

排序是每个开发人员都需要掌握的技能。排序是对程序本身有一个全面的理解。不同的排序算法很好地展示了算法设计上如何强烈的影响程序的复杂度、运行速度和效率。今天的文章和谈谈大家都熟悉的各种排序使用 Python 如何实现,废话就不多说啦,开干!

选择排序

选择排序一般是将初始值设为初始值,再循环后面每个元素与第一个元素比较,最终筛选出一个最小或最大值,最后将有序的数值排在前面,每次选择当前序列的最小值,将其与当前序列的第一个元素交换位置,每迭代一次,当前序列长度减一。迭代结束,即可得到有序序列。 实现代码如下:

def select_s(data):
  # 第一层循环:取出数组中的每个元素
  for i in range(len(data)):
    temp = i  # 拿取一个元素用来比较
    # 第二层循环:从第i后面的一个值开始循环,与data[i]进行比较
    for j in range(i+1,len(data)):
      if data[j] < data[temp]:
        data[temp], data[j] = data[j], data[temp]
  print(data)

调用运行结果:

if __name__ == '__main__':
  data = [14, 31, 14, 6, 18, 24, 2, 40]
  select_s(data)

输出结果:

[2, 6, 14, 14, 18, 24, 31, 40]

插入排序

插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。

插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。

深入分析python 排序

实现代码如下:

def insert_s(data):
  # 第一层循环: 从第二个元素开始循环取出元素,取出的元素再与有序区元素进行比较
  for i in range(1,len(data)):
    temp = data[i]
    j = i-1
    while j>=0 and temp < data[j]:
      data[j+1] = data[j]  
      j = j-1  # 在与前面一个元素进行比较,所以j 需要减1
    # 当j = -1 就跳出循环,将temp值赋给第一个值,即data[0]
    data[j+1] = temp
  print(data)

调用运行结果:

if __name__ == '__main__':
data = [12, 3, 13, 56, 10, 22, 2, 40]
insert_s(data)

输出结果:

[2, 3, 10, 12, 13, 22, 40, 56]

冒泡排序

冒泡排序(顺序形式),从左向右,两两比较,如果左边元素大于右边,就交换两个元素的位置。

其中,每一轮排序,序列中最大的元素浮动到最右面。也就是说,每一轮排序,至少确保有一个元素在正确的位置。

这样接下来的循环,就不需要考虑已经排好序的元素了,每次内层循环次数都会减一。

其中,如果有一轮循环之后,次序并没有交换,这时我们就可以停止循环,得到我们想要的有序序列了。

深入分析python 排序

def insert_s(data):
  # 第一层循环: 从第二个元素开始循环取出元素,取出的元素再与有序区元素进行比较
  for i in range(1,len(data)):
    temp = data[i]
    j = i-1
    while j>=0 and temp < data[j]:
      data[j+1] = data[j]  
      j = j-1  # 在与前面一个元素进行比较,所以j 需要减1
    # 当j = -1 就跳出循环,将temp值赋给第一个值,即data[0]
    data[j+1] = temp
  print(data)

调用运行结果:

if __name__ == '__main__':
  data = [12, 3, 13, 56, 10, 22, 2, 40]
  insert_s(data)

输出结果:

[2, 3, 10, 12, 13, 22, 40, 56]

快速排序

首先要打乱序列顺序,以防算法陷入最坏时间复杂度。所以快速排序使用 “分而治之” 的方法。

对于一串序列,首先从中选取一个数,凡是小于这个数的值就被放在左边,凡是大于这个数的值就被放在右边。然后,继续对左右两摞进行快速排序。

直到进行快速排序的序列长度小于 2 (即序列中只有一个值或者空值)。

深入分析python 排序

代码如下:

# 快速排序
def partition(data, left, right):
  temp = data[left]
  while left < right:
    # 如果最右边的值大于中间值,则最右边值往后退一个位置,反之,就将值赋值给最左边位置
    while left < right and data[right] >= temp:
      right = right - 1
    data[left] = data[right]
    # 如果最左边的值小于中间值,则最左边值往前进一个位置,反之,就将值赋值给最右边位置
    while left < right and data[left] <= temp:
      left = left + 1
    data[right] = data[left]
  # 循环结束,即可定位到中间位置,将初始值,赋值到这个位置
  data[left] = temp
  return left


def quick_sort(data, left, right):
  if left < right:
    mid = partition(data, left, right)
    quick_sort(data, left, mid)
    quick_sort(data, mid + 1, right)

总结

今天的文章主要是使用 Python 实现各大排序程序,以及排序算法实现思路的梳理,自己学习的同时给大家整理思路!

示例代码Python 排序了解一下?

以上就是深入分析python 排序的详细内容,更多关于python 排序的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python中列表元素连接方法join用法实例
Apr 07 Python
使用PM2+nginx部署python项目的方法示例
Nov 07 Python
python判断文件是否存在,不存在就创建一个的实例
Feb 18 Python
Python 函数返回值的示例代码
Mar 11 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
Apr 05 Python
python3实现表白神器
Apr 09 Python
python3.6环境安装+pip环境配置教程图文详解
Jun 20 Python
python 3.7.4 安装 opencv的教程
Oct 10 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
Jan 23 Python
判断Threading.start新线程是否执行完毕的实例
May 02 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
Nov 13 Python
你喜欢篮球吗?Python实现篮球游戏
Jun 11 Python
超级实用的8个Python列表技巧
Aug 24 #Python
基于CentOS搭建Python Django环境过程解析
Aug 24 #Python
详解Django中views数据查询使用locals()函数进行优化
Aug 24 #Python
python3让print输出不换行的方法
Aug 24 #Python
Django3中的自定义用户模型实例详解
Aug 23 #Python
Python用K-means聚类算法进行客户分群的实现
Aug 23 #Python
pandas参数设置的实用小技巧
Aug 23 #Python
You might like
php去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
解析php取整的几种方式
2013/06/25 PHP
php计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
破解Session cookie的方法
2006/07/28 Javascript
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
符合标准的js表单提交的代码
2007/09/13 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
jquery实现select选中行、列合计示例
2014/04/25 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
详解Vue如何支持JSX语法
2017/11/10 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
微信小程序实现星星评价效果
2018/11/02 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
python 实现在txt指定行追加文本的方法
2018/04/29 Python
python实现图片文件批量重命名
2020/03/23 Python
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
国际会议邀请函范文
2014/01/16 职场文书
化学教师教学反思
2014/01/17 职场文书
社会学专业学生职业规划书
2014/02/07 职场文书
成立公司计划书
2014/05/07 职场文书
2014年党支部承诺书
2014/05/30 职场文书
七一建党日演讲稿
2014/09/05 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
使用Ajax实现无刷新上传文件
2022/04/12 Javascript
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript