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 zip文件 压缩
Dec 24 Python
Python实现在Linux系统下更改当前进程运行用户
Feb 04 Python
python启动应用程序和终止应用程序的方法
Jun 28 Python
Python3 chardet模块查看编码格式的例子
Aug 14 Python
python数据类型之间怎么转换技巧分享
Aug 20 Python
python Pillow图像处理方法汇总
Oct 16 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 Python
关于python的缩进规则的知识点详解
Jun 22 Python
Python使用socket_TCP实现小文件下载功能
Oct 09 Python
Django中的DateTimeField和DateField实现
Feb 24 Python
解决Jupyter-notebook不弹出默认浏览器的问题
Mar 30 Python
详解Python描述符的工作原理
Jun 11 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中的fopen()函数用打开文件模式说明
2013/06/20 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
php的常量和变量实例详解
2017/06/27 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
JS 常用校验函数
2009/03/26 Javascript
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
js调用css属性写法
2013/09/21 Javascript
JS判断图片是否加载完成方法汇总(最新版)
2016/05/13 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
Ionic3 UI组件之autocomplete详解
2017/06/08 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
2018/08/27 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
Python数据集切分实例
2018/12/08 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
python字符串的index和find的区别详解
2020/06/20 Python
使用pytorch实现论文中的unet网络
2020/06/24 Python
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
高中的职业生涯规划书
2013/12/28 职场文书
检察官就职演讲稿
2014/01/13 职场文书
年会邀请函范文
2015/01/30 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书