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(Tornado)模拟登录小米抢手机
Nov 12 Python
python写的一个squid访问日志分析的小程序
Sep 17 Python
好用的Python编辑器WingIDE的使用经验总结
Aug 31 Python
详解python并发获取snmp信息及性能测试
Mar 27 Python
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
Python并发编程协程(Coroutine)之Gevent详解
Dec 27 Python
django在接受post请求时显示403forbidden实例解析
Jan 25 Python
Python设计模式之桥接模式原理与用法实例分析
Jan 10 Python
Tensorflow 实现释放内存
Feb 03 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
Jun 11 Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 Python
详解Python中如何将数据存储为json格式的文件
Nov 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
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
php学习笔记 面向对象的构造与析构方法
2011/06/13 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
Array.prototype 的泛型应用分析
2010/04/30 Javascript
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
非主流的textarea自增长实现js代码
2011/12/20 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
详解vue axios二次封装
2018/07/22 Javascript
react native 文字轮播的实现示例
2018/07/27 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
jQuery实现合并表格单元格中相同行操作示例
2019/01/28 jQuery
vuex实现及简略解析(小结)
2019/03/01 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
vue+elementUI实现图片上传功能
2019/08/20 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
Python采用Django制作简易的知乎日报API
2016/08/03 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
python3 下载网络图片代码实例
2019/08/27 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
python实现三壶谜题的示例详解
2020/11/02 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
写出程序把一个链表中的接点顺序倒排
2014/04/28 面试题
活动总结模板
2014/05/09 职场文书
师德师风个人自我剖析材料
2014/09/27 职场文书
长城导游词
2015/01/30 职场文书
MySQL通过binlog恢复数据
2021/05/27 MySQL