python常用排序算法的实现代码


Posted in Python onNovember 08, 2019

这篇文章主要介绍了python常用排序算法的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

排序是计算机语言需要实现的基本算法之一,有序的数据结构会带来效率上的极大提升。

1.插入排序

插入排序默认当前被插入的序列是有序的,新元素插入到应该插入的位置,使得新序列仍然有序。

def insertion_sort(old_list):
  n=len(old_list)
  k=0
  for i in range(1,n):
    temp=old_list[i]
    j=i
    while j>0 and temp<old_list[j-1]:
      old_list[j]=old_list[j-1]
      j=j-1
    old_list[j]=temp
  return old_list

2.冒泡排序

冒泡排序的原理是对序列进行遍历,遍历过程中如果发现相邻两个元素,左边的元素大于右边,则进行交换,一次遍历之后最大的元素被移动到对尾,然后进行第二次遍历,直到队列有序。

def bubble_sort(old_list):
  n=len(old_list)
  for i in range(n-1):
    for j in range(n-1-i):
      if old_list[j]>old_list[j+1]:
        old_list[j],old_list[j+1]=old_list[j+1],old_list[j]
  return old_list

3.快速排序

快速排序的实现方法是设置两个游标,一个从前往后,一个从后往前,如果左侧游标所指数据大于右侧,两数据进行交换,直到两个游标指向同一数据,则第一趟遍历结束。结束时游标所在数据,左侧都比其小,右侧都比其大。

接下来对游标前后的两个序列进行递归操作。

def quick_sort(list,low,high):
  i=low
  j=high  
  if i >= j:
    return list
  key=list[i]
  while i < j:
    while i < j and list[j]>=key:
      j = j - 1
    list[i]=list[j]
    while i < j and list[i]<=key:
      i = i + 1
    list[j]=list[i]
  list[i]=key
  quick_sort(list,low,i-1)
  quick_sort(list,j+1,high)
  return list

4.选择排序

选择排序的原理是是先找到起始数组中最小的元素,将它交换到i=0;然后寻找剩下元素中最小的元素,将它交换到i=1的位置…… 直到找到第二大的元素,将它交换到n-2的位置。这时,整个数组的排序完成。

def select_sort(list):
  length=len(list)
  for i in range(length):
    min_index=i
    for j in range(i,length):
      if list[j]<list[min_index]:
        min_index=j
    list[i],list[min_index]=list[min_index],list[i]
  return list

5.归并排序

归并排序是对数组进行拆分再拆分,直到不能再拆分,然后分别对最小粒度的子数组进行合并,然后再合并稍微大一点的数组,直到最终合成一个最大的数组。分两个函数完成,一个负责拆分,一个负责排序合并。

def merge_sort(list):
  if len(list)<=1:
    return list
  mid=int(len(list)/2)
  left=merge_sort(list[:mid])
  right=merge_sort(list[mid:])
  return merge(left,right)
def merge(list1,list2):
  list=[]
  i,j=0,0
  while i<len(list1) and j<len(list2):
    if list1[i]<list2[j]:
      list.append(list1[i])
      i=i+1
    elif list1[i]>=list2[j]:
      list.append(list2[j])
      j=j+1
  list.extend(list1[i:])
  list.extend(list2[j:])
  return list

6.希尔排序

def shell_sort(nums):
  step = len(nums)/2
  while step > 0:
    for i in range(step, len(nums)):
      while i >= step and nums[i-step] > nums[i]:
        nums[i], nums[i-step] = nums[i-step], nums[i]
        i -= step
    step = step/2
  return nums

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的数据结构与算法之双端队列详解
Apr 22 Python
在Python web中实现验证码图片代码分享
Nov 09 Python
浅谈pycharm的xmx和xms设置方法
Dec 03 Python
python广度优先搜索得到两点间最短路径
Jan 17 Python
python读取Excel表格文件的方法
Sep 02 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
Apr 16 Python
python求numpy中array按列非零元素的平均值案例
Jun 08 Python
python上selenium的弹框操作实现
Jul 13 Python
在 Python 中使用 MQTT的方法
Aug 18 Python
浅谈哪个Python库才最适合做数据可视化
Jun 28 Python
Python 多线程处理任务实例
Nov 07 Python
python分布式编程实现过程解析
Nov 08 #Python
详解mac python+selenium+Chrome 简单案例
Nov 08 #Python
python manage.py runserver流程解析
Nov 08 #Python
详解python中docx库的安装过程
Nov 08 #Python
numpy.array 操作使用简单总结
Nov 08 #Python
如何在python中写hive脚本
Nov 08 #Python
Python 依赖库太多了该如何管理
Nov 08 #Python
You might like
PHP 日期时间函数的高级应用技巧
2009/10/10 PHP
PHP解析RSS的方法
2015/03/05 PHP
浅谈JavaScript字符串与数组
2015/06/03 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
Easyui的组合框的取值与赋值
2016/10/28 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
实例详解Node.js 函数
2018/06/10 Javascript
JS实现模糊查询带下拉匹配效果
2018/06/21 Javascript
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
基于nodejs的雪碧图制作工具的示例代码
2018/11/05 NodeJs
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
Python爬取京东的商品分类与链接
2016/08/26 Python
python tkinter组件摆放方式详解
2019/09/16 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
html5唤醒APP小记
2019/03/27 HTML / CSS
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
超市后勤自我鉴定
2014/01/17 职场文书
公司租房协议书
2014/10/14 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server
python中urllib包的网络请求教程
2022/04/19 Python