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

最新文章

  1. js学习笔记:webpack基础入门(一)
  2. MySQL Fabric和MyBatis的整合过程中遇到的问题
  3. ssh架构简单解释和vo po解释
  4. Confluent介绍(一)
  5. CSS3初学篇章_3(属性选择符/字体样式/元素样式)
  6. 线程高级应用-心得6-java5线程并发库中同步工具类(synchronizers),新知识大用途
  7. Dubbo架构设计详解-转
  8. JAVA设计模式--State(状态模式)
  9. ubuntu - sudo in php exec
  10. 【BZOJ 3110】 [Zjoi2013]K大数查询(整体二分)
  11. 如何快速学习bootstrap
  12. ~/microwindows-0.89pre8/src/bin$ ./nano-X error:Cannot bind to named socket
  13. Oracle左连接、右连接、全外连接以及(+)号用法(转)
  14. sql语句like的使用方法
  15. JDK解压版制作
  16. storybook构建vue组件
  17. Linux 入侵检测小结
  18. 德哥的PostgreSQL私房菜 - 史上最屌PG资料合集
  19. hduoj1073--Online Judge
  20. animation-fill-mode

热门文章

  1. 被AppStore拒绝理由(一)
  2. update_notifier 造成nodejs进程数量增长的问题
  3. Java 构造时成员初始化的陷阱
  4. 抽象类(Abstract)和接口的不同点、共同点(Interface)。
  5. EF + WCF学习笔记——EF实体类序列化
  6. oc40--类的启动过程
  7. bzoj 4318 OSU! —— 期望DP
  8. 96.extjs 页面
  9. Coursera Algorithms week1 算法分析 练习测验: 3Sum in quadratic time
  10. (Go)07.Go语言中strings和strconv包示例代码详解01