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中unittest用法实例
Sep 25 Python
Python判断值是否在list或set中的性能对比分析
Apr 16 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
python 中字典嵌套列表的方法
Jul 03 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
May 16 Python
python+selenium 鼠标事件操作方法
Aug 24 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
Nov 11 Python
Django后端发送小程序微信模板消息示例(服务通知)
Dec 17 Python
浅谈django 模型类使用save()方法的好处与注意事项
Mar 28 Python
Python 实现敏感目录扫描的示例代码
May 21 Python
python Gabor滤波器讲解
Oct 26 Python
PyTorch 中的傅里叶卷积实现示例
Dec 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常用字符串的总结(待续)
2013/06/07 PHP
PHP 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
php文件下载处理方法分析
2015/04/22 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
Jquery解析Json格式数据过程代码
2014/10/17 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
2015/08/22 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
vue组件的写法汇总
2018/04/12 Javascript
vue添加axios,并且指定baseurl的方法
2018/09/19 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
详解node和ES6的模块导出与导入
2020/02/19 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
python re正则表达式模块(Regular Expression)
2014/07/16 Python
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
python中通过预先编译正则表达式提高效率
2017/09/25 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
外贸实习生自荐信范文
2013/11/24 职场文书
文科教师毕业的自我评价
2014/01/16 职场文书
学子宴答谢词
2014/01/25 职场文书
应聘销售主管的求职信
2014/04/26 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript