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 相关文章推荐
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
Dec 04 Python
python操作xml文件示例
Apr 07 Python
python超简单解决约瑟夫环问题
May 12 Python
python用Pygal如何生成漂亮的SVG图像详解
Feb 10 Python
Python下使用Scrapy爬取网页内容的实例
May 21 Python
Python Logging 日志记录入门学习
Jun 02 Python
python斐波那契数列的计算方法
Sep 27 Python
Python正则表达式匹配数字和小数的方法
Jul 03 Python
基于Keras中Conv1D和Conv2D的区别说明
Jun 19 Python
python 最简单的实现适配器设计模式的示例
Jun 30 Python
利用Python第三方库实现预测NBA比赛结果
Jun 21 Python
pandas求平均数和中位数的方法实例
Aug 04 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 5.0对象模型深度探索之绑定
2006/09/05 PHP
第六节 访问属性和方法 [6]
2006/10/09 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
JavaScript eval() 函数介绍及应用示例
2014/07/29 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
vue脚手架搭建项目的兼容性配置详解
2018/07/17 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
python生成指定尺寸缩略图的示例
2014/05/07 Python
Python爬取qq空间说说的实例代码
2018/08/17 Python
python地震数据可视化详解
2019/06/18 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
Python 项目转化为so文件实例
2019/12/23 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
HTML5之消息通知的使用(Web Notification)
2018/10/30 HTML / CSS
递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
2013/04/28 面试题
别名指示符是什么
2012/10/08 面试题
Ajax的优点和缺点
2014/11/21 面试题
教师自荐信范文
2013/12/09 职场文书
高中数学教学反思
2014/01/30 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
大学生党员承诺书
2014/05/20 职场文书
详解Golang如何优雅的终止一个服务
2022/03/21 Golang