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 list中append()与extend()用法分享
Mar 24 Python
教你安装python Django(图文)
Nov 04 Python
解决python写的windows服务不能启动的问题
Apr 15 Python
使用PDB模式调试Python程序介绍
Apr 05 Python
给Python入门者的一些编程建议
Jun 15 Python
Python基于PyGraphics包实现图片截取功能的方法
Dec 21 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
Python3基于sax解析xml操作示例
May 22 Python
python实现排序算法解析
Sep 08 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
Aug 04 Python
python虚拟环境完美部署教程
Aug 06 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 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
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
dedecms模板标签代码官方参考
2007/03/17 PHP
php在线生成ico文件的代码
2007/10/09 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
2016/03/14 PHP
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
JavaScript Split()方法
2015/12/18 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
Python中pillow知识点学习
2018/04/30 Python
pandas计算最大连续间隔的方法
2019/07/04 Python
python dataframe NaN处理方式
2019/12/26 Python
python模块内置属性概念及实例
2021/02/18 Python
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
英国女士和男士时尚服装网上购物:Top Labels Online
2018/03/25 全球购物
英国在线药房和在线医生:LloydsPharmacy
2019/10/21 全球购物
优秀毕业大学生推荐信
2013/11/13 职场文书
记帐员岗位责任制
2014/02/08 职场文书
五型班组建设方案
2014/02/10 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
2014高中生入党思想汇报范文
2014/09/13 职场文书
小学教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android