L = [2,6,4,7,9,1,3,5,8]

# 1.插入排序
def insert_sort(List):
n = len(List)
for i in range(1,n): # 得到索引
j = i-1 # 获取当前元素之前的索引
temp = List[i]
while j >= 0: # 当索引大于等于时开始循环
if temp < List[j]: # 当List[i]元素小于之前的元素
List[j+1] = List[j] # 交换两个元素的位置
List[j] = temp
j -= 1 # 继续比较交换后的list[i]和再前一个元素的大小,继续循环
return List print(insert_sort(L)) #2.冒泡排序
def bubble_sort(List):
n = len(List)
for i in range(n):
for j in range(i+1, n):
if List[i] > List[j]:
List[j], List[i] = List[i], List[j]
return List print(bubble_sort(L)) # 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 print(quick_sort(L, 0, len(L)-1)) #4.选择排序
def select_sort(List):
length = len(List)
for i in range(length): # 得出全部的索引
min_index=i # 假设最小的索引
for j in range(i,length): # 获取i之后的索引
if List[j]<List[min_index]:# 比较i 之后的元素与最小元素的大小
min_index=j # 如果小于最小元素,那么久交换索引
List[i],List[min_index]=List[min_index],List[i] # 交换最小的索引指向的值
return List print(select_sort(L)) #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 print(merge_sort(L)) #6.希尔排序
def shell_sort(List):
step = int(len(List)/2)
while step > 0:
for i in range(step, int(len(List))):
while i >= step and List[i-step] > List[i]:
List[i], List[i-step] = List[i-step], List[i]
i -= step
step = int(step/2)
return List print(shell_sort(L)) # 7.堆排序
def adjust_heap(List, i, size):
lchild = 2 * i + 1
rchild = 2 * i + 2
m = i
if i < int(size/2) and List[lchild] > List[m]:
m = lchild
if rchild < size and List[rchild] > List[m]:
m = rchild
if m != i:
List[m], List[i] = List[i], List[m]
adjust_heap(List, m, size) def build_heap(List, size):
for i in range(0, int(size/2))[::-1]:
adjust_heap(List, i, size) def heap_sort(List):
size = len(List)
build_heap(List, size)
for i in range(0, size)[::-1]:
List[0], List[i] = List[i], List[0]
adjust_heap(List, 0, i)
return List print(heap_sort(L)) # 8.基数排序
import math
def radix_sort(List, radix=10):
n = int(math.ceil(math.log(max(List), radix)))
bucket = [[] for i in range(radix)]
for i in range(1, n + 1):
for j in List:
bucket[int(j/(radix**(i-1))) % (radix**i)].append(j)
del List[:]
for x in bucket:
List += x
del x[:]
return List print(radix_sort(L))

  参考: https://www.cnblogs.com/wangbin2188/p/6520560.html

  以上运行环境为: python3.7.0 win10

Python实现8中常用排序算法的更多相关文章

  1. 面试中常用排序算法实现(Java)

    当我们进行数据处理的时候,往往需要对数据进行查找操作,一个有序的数据集往往能够在高效的查找算法下快速得到结果.所以排序的效率就会显的十分重要,本篇我们将着重的介绍几个常见的排序算法,涉及如下内容: 排 ...

  2. 面试中常用排序算法的python实现和性能分析

    这篇是关于排序的,把常见的排序算法和面试中经常提到的一些问题整理了一下.这里面大概有3个需要提到的问题: 虽然专业是数学,但是自己还是比较讨厌繁琐的公式,所以基本上文章所有的逻辑,我都尽可能的用大白话 ...

  3. 排序算法——(2)Python实现十大常用排序算法

    上期为大家讲解了排序算法常见的几个概念: 相关性:排序时是否需要比较元素 稳定性:相同元素排序后是否可能打乱 时间空间复杂度:随着元素增加时间和空间随之变化的函数 如果有遗忘的同学可以看排序算法——( ...

  4. 常用排序算法的python实现和性能分析

    常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...

  5. Python实现常用排序算法

    Python实现常用排序算法 冒泡排序 思路: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完 ...

  6. 第四百一十五节,python常用排序算法学习

    第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...

  7. Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...

  8. 转载部长一篇大作:常用排序算法之JavaScript实现

    转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...

  9. Java 常用排序算法/程序员必须掌握的 8大排序算法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...

随机推荐

  1. Spring Boot、微服务架构和大数据

    一文读懂 Spring Boot.微服务架构和大数据治理三者之间的故事 https://www.cnblogs.com/ityouknow/p/9034377.html 微服务架构 微服务的诞生并非偶 ...

  2. 【POJ 3460】 Booksort

    [题目链接] http://poj.org/problem?id=3460 [算法] IDA* 注意特判答案为0的情况 [代码] #include <algorithm> #include ...

  3. 98.Ext.form.Label组件的基本用法

    转自:https://www.cnblogs.com/kelly/archive/2009/06/05/1496897.html 本篇介绍Ext.form.Label组件的基本用法: 这里通过上一篇介 ...

  4. PCB MS CLR 聚合函数 joinString加排序实现

    准备着手,动态列SQL查询,要实现动态列SQL,会运用到聚合函数,而SQL本身聚合函数有限, 无满足此用户任意字段组合变化,再加上工艺流程重复相同工序,如;沉铜1,沉铜2对应工序代码都是相同的 而通常 ...

  5. Blue Jeans(串)

    http://poj.org/problem?id=3080 寻找最长公共子串..暴搜的.. #include<stdio.h> #include<string.h> int ...

  6. POJ 3264 线段树 ST

    题意:给你一个数列,从中挑一段,问你这段数的最大值减最小值是多少. 思路:线段树. // by Sirius_Ren #include <cstdio> #include <algo ...

  7. Windows7下caffe-ssd-microsoft下编译

    整个编译可谓漫长 编译了两天 网上教程也很多 但是也很杂 遇到各种错误 总归是编完了 1.下载Windows版本的Caffe-SSD源码 下载链接:https://github.com/conner9 ...

  8. Discuze修改用户名长度限制

    第一步,在网站 uc_client\model 目录下的 user.php文件中,找到如下代码: ? 1 if($len > 15 || $len < 3 || preg_match(&q ...

  9. jsp页面导入excel文件的步骤及配置

    上传使用flash插件 需要jquery.uploadify.min.js,uploadify.css,poi-ooxml-3.8-20120326.jar等 jsp页面: <%@include ...

  10. 深入浅出java多态

    所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个 ...