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实现文件分组复制到不同目录的例子
Jun 04 Python
跟老齐学Python之集合(set)
Sep 24 Python
Python将图片转换为字符画的方法
Jun 16 Python
Django框架多表查询实例分析
Jul 04 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 Python
用scikit-learn和pandas学习线性回归的方法
Jun 21 Python
python tkinter实现彩球碰撞屏保
Jul 30 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 Python
python正则表达式实例代码
Mar 03 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
python实现学生成绩测评系统
Jun 22 Python
python如何编写类似nmap的扫描工具
Nov 06 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
重置版宣传动画
2020/04/09 魔兽争霸
晶体管来复再生式二管收音机
2021/03/02 无线电
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
把textarea中字符串里含有的回车换行替换成&amp;lt;br&amp;gt;的javascript代码
2007/04/20 Javascript
JS启动应用程序的一个简单例子
2008/05/11 Javascript
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
javascript实现树形菜单的方法
2015/07/17 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
vue和webpack项目构建过程常用的npm命令详解
2018/06/15 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
用Python实现协同过滤的教程
2015/04/08 Python
python实现图像识别功能
2018/01/29 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
Python 实现自动导入缺失的库
2019/10/29 Python
wxPython实现列表增删改查功能
2019/11/19 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
python之生成多层json结构的实现
2020/02/27 Python
Pytorch 使用不同版本的cuda的方法步骤
2020/04/02 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
2014年情人节活动方案
2014/02/16 职场文书
安全月活动总结
2014/05/05 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
教师辞职信范文
2015/02/28 职场文书
Redis 持久化 RDB 与 AOF的执行过程
2021/11/07 Redis