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 13 Python
Python 机器学习库 NumPy入门教程
Apr 19 Python
通过python扫描二维码/条形码并打印数据
Nov 14 Python
numpy np.newaxis 的实用分享
Nov 30 Python
Python实现桌面翻译工具【新手必学】
Feb 12 Python
Tensorflow训练MNIST手写数字识别模型
Feb 13 Python
python实现提取str字符串/json中多级目录下的某个值
Feb 27 Python
python的链表基础知识点
Sep 13 Python
Python colormap库的安装和使用详情
Oct 06 Python
python 实现全球IP归属地查询工具
Dec 18 Python
Python机器学习之PCA降维算法详解
May 19 Python
Jupyter notebook 更改文件打开的默认路径操作
May 21 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
php max_execution_time执行时间问题
2011/07/17 PHP
php模板原理讲解
2013/11/13 PHP
PHP写日志的实现方法
2014/11/05 PHP
php中header跳转使用include包含解决参数丢失问题
2015/05/08 PHP
Yii2 RESTful中api的使用及开发实例详解
2016/07/06 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
js下拉菜单语言选项简单实现
2013/09/23 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
JS 数组基本用法入门示例解析
2020/01/16 Javascript
python标准日志模块logging的使用方法
2013/11/01 Python
Python实现把xml或xsl转换为html格式
2015/04/08 Python
Python WSGI的深入理解
2018/08/01 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
Python3实现的判断环形链表算法示例
2019/03/07 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
简单分析python的类变量、实例变量
2019/08/23 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
临床医学专业学生的自我评价分享
2013/11/21 职场文书
酒店中秋节促销方案
2014/01/30 职场文书
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
2014年社区庆元旦活动方案
2014/03/08 职场文书
环保倡议书100字
2014/05/15 职场文书
节水口号标语
2014/06/19 职场文书
2015年银行个人工作总结
2015/05/14 职场文书