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中处理XML的教程
Apr 29 Python
浅谈Python中函数的参数传递
Jun 21 Python
详解supervisor使用教程
Nov 21 Python
Python基于百度云文字识别API
Dec 13 Python
Python实现深度遍历和广度遍历的方法
Jan 22 Python
python实现石头剪刀布程序
Jan 20 Python
Python从文件中读取数据的方法讲解
Feb 14 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
Dec 03 Python
python从zip中删除指定后缀文件(推荐)
Dec 05 Python
python序列类型种类详解
Feb 26 Python
关于python中的xpath解析定位
Mar 06 Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 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
全国FM电台频率大全 - 1 北京市
2020/03/11 无线电
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
2010/03/09 Javascript
javascript设计模式 接口介绍
2012/07/24 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
为jquery的ajaxfileupload增加附加参数的方法
2014/03/04 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
2014/04/17 Javascript
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
jQuery设置图片等比例缩小的方法
2017/04/29 jQuery
Angular.js中window.onload(),$(document).ready()的写法浅析
2017/09/28 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
jQuery UI实现动画效果代码分享
2018/08/19 jQuery
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
简单介绍python封装的基本知识
2019/08/10 Python
python字典setdefault方法和get方法使用实例
2019/12/25 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
canvas与html5实现视频截图功能示例
2016/12/15 HTML / CSS
ALDO美国官网:加拿大女鞋品牌
2018/12/28 全球购物
聚美优品广告词改编
2014/03/14 职场文书
机关办公室岗位职责
2014/04/16 职场文书
市级优秀班主任事迹材料
2014/05/13 职场文书
2015年安全生产月活动总结
2015/03/26 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
详解Go语言运用广度优先搜索走迷宫
2021/06/23 Python
Java中API的使用方法详情
2022/04/06 Java/Android
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android