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使用PyFetion来发送短信的例子
Apr 22 Python
python服务器端收发请求的实现代码
Sep 29 Python
Python实现随机生成有效手机号码及身份证功能示例
Jun 05 Python
分享一下Python数据分析常用的8款工具
Apr 29 Python
django 多数据库配置教程
May 30 Python
Python爬虫实现简单的爬取有道翻译功能示例
Jul 13 Python
pyqt5 实现在别的窗口弹出进度条
Jun 18 Python
Python版中国省市经纬度
Feb 11 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
3分钟看懂Python后端必须知道的Django的信号机制
Jul 26 Python
django中cookiecutter的使用教程
Dec 03 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
Feb 01 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下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
php使用PDO方法详解
2014/12/27 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
php实现单笔转账到支付宝功能
2018/10/09 PHP
JavaScript打字小游戏代码
2011/12/26 Javascript
js实现按一下删除键删除整个单词附demo
2014/09/05 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
js获取checkbox值的方法
2015/01/28 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
用js实现简单算法的实例代码
2016/09/24 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
node.js 如何监视文件变化
2020/09/01 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
对python sklearn one-hot编码详解
2018/07/10 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
2019/06/04 Python
详解mac python+selenium+Chrome 简单案例
2019/11/08 Python
python安装及变量名介绍详解
2020/12/12 Python
党员学习十八大感想
2014/01/17 职场文书
大学生旅游业创业计划书
2014/01/29 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
2015年学校体育工作总结
2015/04/22 职场文书
社区低保工作总结2015
2015/07/23 职场文书
Python如何把不同类型数据的json序列化
2021/04/30 Python
Go语言基础知识点介绍
2021/07/04 Golang
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android