Python实现8中常用排序算法
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中常用排序算法的更多相关文章
- 面试中常用排序算法实现(Java)
当我们进行数据处理的时候,往往需要对数据进行查找操作,一个有序的数据集往往能够在高效的查找算法下快速得到结果.所以排序的效率就会显的十分重要,本篇我们将着重的介绍几个常见的排序算法,涉及如下内容: 排 ...
- 面试中常用排序算法的python实现和性能分析
这篇是关于排序的,把常见的排序算法和面试中经常提到的一些问题整理了一下.这里面大概有3个需要提到的问题: 虽然专业是数学,但是自己还是比较讨厌繁琐的公式,所以基本上文章所有的逻辑,我都尽可能的用大白话 ...
- 排序算法——(2)Python实现十大常用排序算法
上期为大家讲解了排序算法常见的几个概念: 相关性:排序时是否需要比较元素 稳定性:相同元素排序后是否可能打乱 时间空间复杂度:随着元素增加时间和空间随之变化的函数 如果有遗忘的同学可以看排序算法——( ...
- 常用排序算法的python实现和性能分析
常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...
- Python实现常用排序算法
Python实现常用排序算法 冒泡排序 思路: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完 ...
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- 转载部长一篇大作:常用排序算法之JavaScript实现
转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...
- Java 常用排序算法/程序员必须掌握的 8大排序算法
Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...
随机推荐
- 571B. Minimization(Codeforces Round #317)
B. Minimization time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- 《从零開始学Swift》学习笔记(Day 52)——Cocoa错误处理模式
原创文章,欢迎转载. 转载请注明:关东升的博客 Swift错误处理模式,在Swift1.x和Swift 2.0是不同的两种模式. Swift 1.x代码错误处理模式採用Cocoa框架错误处理模式,到如 ...
- 转:java身份证格式强校验
package com.dsh.zealandweb.utils; import java.util.HashSet; import java.util.regex.Pattern; import o ...
- 到底什么是nandflash,norflash,sdram,emmc,rom,ram【转】
本文转载自:http://blog.sina.com.cn/s/blog_6dd8f2b70101le26.html 最近被nandflash,norflash,sdram,emmc,rom,ram搞 ...
- Parallel in C#
https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/how-to-write-a-simple-parallel ...
- MVC + Redis
net MVC + Redis(hash入库+log4net集成) https://www.cnblogs.com/hoyu/p/9063675.html 博客四元素 既然要写一个博客类的网站,那就应 ...
- B1303 [CQOI2009] 中位数图 数学
想明白算法之后特别水,因为b只有可能出现一次,所以直接在b的左右找就行了,比他大的为1,比他小的为-1,然后维护前缀和就行了. 假如b有可能出现多次呢?按照这种方法好像也很好办,就是枚举每个点就行了, ...
- C++_class_powerpoint_1.2
用英文编写(复制黏贴)果然比较吃力啊,果然还是要写中文. Expressions and Statements Operator summary Scope resolution class::m ...
- C#微信公众号的开发——服务配置
最近因为需要用C#开发微信公众号的一些功能,记录一下开发公众号的一些坑..... 首先先介绍一下,微信公众号的官方文档.虽然这个文档我感觉比较糙,但是还是可以借鉴一下让我们摸着石头过河的. 首先我们得 ...
- Google的网站性能优化最佳实践
网站性能最佳实践 当描述一个web页面的页面速度,评价的一致性遵循许多不同的规则.这些规则是任何阶段的web开发可以应用的前端最佳实践.这个文档的每个规则都陈述于此,无论你是否运行页面测速工具-- ...