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 代码性能优化技巧分享
Aug 07 Python
Python ZipFile模块详解
Nov 01 Python
python登录豆瓣并发帖的方法
Jul 08 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
Jan 26 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
Apr 23 Python
python实现简单登陆系统
Oct 18 Python
Python实现随机创建电话号码的方法示例
Dec 07 Python
正确理解Python中if __name__ == '__main__'
Jan 24 Python
Python连接SQLite数据库并进行增册改查操作方法详解
Feb 18 Python
Python基于BeautifulSoup爬取京东商品信息
Jun 01 Python
详解基于python的图像Gabor变换及特征提取
Oct 26 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 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读取数据库信息的几种方法
2008/05/24 PHP
PHP 字符串分割和比较
2009/10/06 PHP
php删除数组元素示例分享
2014/02/17 PHP
PHP empty函数报错解决办法
2014/03/06 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
PHP7创建销毁session的实例方法
2020/02/03 PHP
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
vue实现数字滚动效果
2020/06/29 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
[01:46]新英雄登场
2019/09/10 DOTA
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
python按照多个条件排序的方法
2019/02/08 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
python动态进度条的实现代码
2019/07/03 Python
Python实现ATM系统
2020/02/17 Python
python openssl模块安装及用法
2020/12/06 Python
python中time、datetime模块的使用
2020/12/14 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
即兴演讲稿
2014/01/04 职场文书
应届实习生的自我评价范文
2014/01/05 职场文书
大四毕业生自荐书
2014/07/05 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
2015年青年志愿者工作总结
2015/05/20 职场文书
2015年网管个人工作总结
2015/05/22 职场文书
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android