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 相关文章推荐
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 Python
Python中threading模块join函数用法实例分析
Jun 04 Python
Python实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 Python
Python os.access()用法实例
Feb 18 Python
Python函数的默认参数设计示例详解
Dec 01 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
Feb 17 Python
Python文件读写w+和r+区别解析
Mar 26 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
Jul 09 Python
利用Python批量识别电子账单数据的方法
Feb 08 Python
Python中json.dumps()函数的使用解析
May 17 Python
解析python中的jsonpath 提取器
Jan 18 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
Protoss兵种对照表
2020/03/14 星际争霸
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
JavaScript 高级语法介绍
2009/06/15 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
2019/12/16 Javascript
python清除字符串里非字母字符的方法
2015/07/02 Python
python xml解析实例详解
2016/11/14 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
Python读取图片为16进制表示简单代码
2018/01/19 Python
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
python内存动态分配过程详解
2019/07/15 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
拿来就用!Python批量合并PDF的示例代码
2020/08/10 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
报社实习生自荐信
2014/01/24 职场文书
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
供货协议书
2014/04/22 职场文书
说明书范文
2014/05/07 职场文书
应聘教师求职信
2014/07/19 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
南湾猴岛导游词
2015/02/09 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android
vue生命周期钩子函数以及触发时机
2022/04/26 Vue.js