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编写生成验证码的脚本的教程
May 04 Python
pymongo为mongodb数据库添加索引的方法
May 11 Python
python获得一个月有多少天的方法
Jun 04 Python
详解Python3中yield生成器的用法
Aug 20 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 Python
python代码实现ID3决策树算法
Dec 20 Python
对python numpy数组中冒号的使用方法详解
Apr 17 Python
Python贪心算法实例小结
Apr 22 Python
利用python的socket发送http(s)请求方法示例
May 07 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
jenkins配置python脚本定时任务过程图解
Oct 29 Python
Python中类似于jquery的pyquery库用法分析
Dec 02 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中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
codeigniter数据库操作函数汇总
2014/06/12 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
js获取网页高度(详细整理)
2012/12/28 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
轻松创建nodejs服务器(3):代码模块化
2014/12/18 NodeJs
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
2016/03/30 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
2017/07/17 jQuery
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
使用httplib模块来制作Python下HTTP客户端的方法
2015/06/19 Python
使用Python神器对付12306变态验证码
2016/01/05 Python
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
Python3实现购物车功能
2018/04/18 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
Django logging配置及使用详解
2019/07/23 Python
python爬取Ajax动态加载网页过程解析
2019/09/05 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
资产评估专业大学生求职信
2013/09/29 职场文书
自主实习接收函
2014/01/13 职场文书
大学生的创业计划书就该这么写
2014/01/30 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
男生贾里读书笔记
2015/06/30 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
Python基础之字符串格式化详解
2021/04/21 Python
在Python 中将类对象序列化为JSON
2022/04/06 Python