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 相关文章推荐
Python3中多线程编程的队列运作示例
Apr 16 Python
Django中几种重定向方法
Apr 28 Python
Python聚类算法之凝聚层次聚类实例分析
Nov 20 Python
Python多线程、异步+多进程爬虫实现代码
Feb 17 Python
python中pandas.DataFrame排除特定行方法示例
Mar 12 Python
Python编程生成随机用户名及密码的方法示例
May 05 Python
python数据处理实战(必看篇)
Jun 11 Python
python爬虫 execjs安装配置及使用
Jul 30 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
Oct 25 Python
使用python计算三角形的斜边例子
Apr 15 Python
基于python实现删除指定文件类型
Jul 21 Python
python中的垃圾回收(GC)机制
Sep 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
模拟SQLSERVER的两个函数:dateadd(),datediff()
2006/10/09 PHP
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
jquery实现的代替传统checkbox样式插件
2015/06/19 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
2018/04/22 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
一次微信小程序内地图的使用实战记录
2019/09/09 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
JS实现时间校验的代码
2020/05/25 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
python实现杨辉三角思路
2017/07/14 Python
numpy自动生成数组详解
2017/12/15 Python
Python实现二维数组输出为图片
2018/04/03 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
德国最大的网上足球商店:11teamsports
2019/09/11 全球购物
三年大学自我鉴定
2014/01/16 职场文书
研究生毕业自我鉴定范文
2014/03/27 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
SpringBoot整合JWT的入门指南
2021/06/29 Java/Android