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 相关文章推荐
使用SAE部署Python运行环境的教程
May 05 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
Oct 21 Python
python使用PIL模块获取图片像素点的方法
Jan 08 Python
对python中矩阵相加函数sum()的使用详解
Jan 28 Python
python多线程实现TCP服务端
Sep 03 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
wxPython色环电阻计算器
Nov 18 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
May 11 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
Jun 28 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 Python
Python time库的时间时钟处理
May 02 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
咖啡的种类和口感
2021/03/03 新手入门
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
微信自定义分享php代码分析
2016/11/24 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
jquery $.ajax入门应用一
2008/11/19 Javascript
JS关键字变色实现思路及代码
2013/02/21 Javascript
JS隐藏参数post传值实例
2013/04/18 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
2016/05/25 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
2016/06/14 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
js实现常用排序算法
2016/08/09 Javascript
JS实现的幻灯片切换显示效果
2016/09/07 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
令按钮悬浮在(手机)页面底部的实现方法
2017/05/02 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
Vue监听滚动实现锚点定位(双向)示例
2019/11/13 Javascript
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
Python读取mat文件,并保存为pickle格式的方法
2018/10/23 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
python增加图像对比度的方法
2019/07/12 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
办理护照介绍信
2014/01/16 职场文书
服务整改报告
2014/11/06 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
国情备忘录观后感
2015/06/04 职场文书
催款函范本大全
2015/06/24 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书