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 相关文章推荐
wxPython中文教程入门实例
Jun 09 Python
浅谈Python浅拷贝、深拷贝及引用机制
Dec 15 Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
使用python搭建服务器并实现Android端与之通信的方法
Jun 28 Python
Python assert关键字原理及实例解析
Dec 13 Python
python 解决flask 图片在线浏览或者直接下载的问题
Jan 09 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
使用pandas库对csv文件进行筛选保存
May 25 Python
基于Python爬取51cto博客页面信息过程解析
Aug 25 Python
用Python将库打包发布到pypi
Apr 13 Python
python中的class_static的@classmethod的巧妙用法
Jun 22 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
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
php的array数组和使用实例简明教程(容易理解)
2014/03/20 PHP
php中Ctype函数用法详解
2014/12/09 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
jquery cookie插件代码类
2009/05/26 Javascript
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
js+css3制作时钟特效
2016/10/16 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
React学习笔记之条件渲染(一)
2017/07/02 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
微信小程序之数据绑定原理解析
2019/08/14 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
Python序列操作之进阶篇
2016/12/08 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
详解K-means算法在Python中的实现
2017/12/05 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
python扫描线填充算法详解
2020/02/19 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
Speedo速比涛法国官方网站:泳衣、泳镜、泳帽、泳裤
2019/07/30 全球购物
个人欠款担保书
2014/05/20 职场文书
教师师德考核自我评价
2014/09/13 职场文书
师德师风自查材料
2014/10/14 职场文书
防汛工作情况汇报
2014/10/28 职场文书
2015年校长新年寄语
2014/12/08 职场文书
出纳试用期自我评价
2015/03/10 职场文书
2016年少先队活动总结
2016/04/06 职场文书