1.冒泡排序

def bubble_sort(alist):
"""冒泡排序"""
n = len(alist)
for j in range(n - 1):
"""j=0,1,2,n-2"""
count = 0
"""内层循环控制从头到尾的遍历"""
for i in range(0, n - 1 - j):
if alist[i] > alist[i + 1]:
alist[i], alist[i + 1] = alist[i + 1], alist[i]
count += 1
if 0 == count:
break

1.1冒泡排序的测试

if __name__ == '__main__':
li = [54, 26, 77, 17, 77, 31, 44, 55, 20]
print(li)
bubble_sort(li)
print(li)

2.选择排序

def selection_sort(alist):
n = len(alist)
""" 需要进⾏n-1次选择操作"""
for i in range(n - 1):
"""记录最⼩位置"""
min_index = i
"""从i+1位置到末尾选择出最⼩数据"""
for j in range(i + 1, n):
if alist[j] < alist[min_index]:
min_index = j
# 如果选择出的数据不在正确位置,进⾏交换
if min_index != i:
alist[i], alist[min_index] = alist[min_index], alist[i]

2.2选择排序的测试

alist = [54, 226, 93, 17, 77, 31, 44, 55, 20]
selection_sort(alist)
print(alist)

3.插入排序

def insert_sort(alist):
n = len(alist)
for j in range(1, n):
for i in range(j, 0, -1):
if alist[i] < alist[i - 1]:
alist[i], alist[i - 1] = alist[i - 1], alist[i]
else:
break
print(alist)

3.3插入排序的测试

if __name__ == '__main__':
li = [54, 26, 93, 17, 77, 31, 44, 55, 20]
print(li)
insert_sort(li)

4.快速排序

def quick_sort(alist, start, end):
if start >= end:
return
mid = alist[start]
left = start
right = end
"""left与right未重合,就向中间移动"""
while left < right:
while left < right and alist[right] >= mid:
right -= 1
alist[left] = alist[right]
while left < right and alist[left] <= mid:
left += 1
alist[right] = alist[left]
"""循环退出来后,left与right相遇,即left=right"""
alist[left] = mid
print(alist)
quick_sort(alist, start, left - 1)
quick_sort(alist, left + 1, end)

4.4快速排序测试

if __name__ == '__main__':
li = [54, 26, 93, 1, 7, 31, 44, 55, 20]
quick_sort(li, 0, len(li) - 1)
# print(li)

5.希尔排序

def shell_sort(alist):
n = len(alist)
gap = n // 2 # 4
while gap >= 1:
"j是从间隔gap到序列末尾的值"
for j in range(gap, n): # j=4 ,5,6,7,8
i = j # i=4 ,5,6,7,8
while (i - gap) >= 0: # i-gap=4-4,5-4,6-4,7-4,8-4
if alist[i] < alist[i - gap]: # 下标为i的和下标为i-gap的比较(alist[4]<alist[0])
alist[i], alist[i - gap] = alist[i - gap], alist[i] # 如果小于交换位置
else:
break # 如果大于,不交换位置
gap = gap // 2 # 减小间隔

5.5希尔排序测试

if __name__ == '__main__':
li = [54, 26, 93, 17, 77, 31, 44, 55, 20]
print(li)
shell_sort(li)
print(li)

6.归并排序

def merge_sort(alist):
"""归并排序"""
n = len(alist)
if 1 == n:
return alist
mid = n // 2
"""对左半部分进行归并排序"""
left_sorted_li = merge_sort(alist[:mid])
"""对右半部分进行归并排序"""
right_sorted_li = merge_sort(alist[mid:])
"""合并两个有序集合"""
left, right = 0, 0 # 设定两个游标,让其初始值为0
merge_sortted_li = [] # 设定一个空列边用于添加合并元素 left_n = len(left_sorted_li)
right_n = len(right_sorted_li) while left < left_n and right < right_n:
if left_sorted_li[left] <= right_sorted_li[right]:
merge_sortted_li.append(left_sorted_li[left])
left += 1
else:
merge_sortted_li.append(right_sorted_li[right])
right += 1 merge_sortted_li += left_sorted_li[left:]
merge_sortted_li += right_sorted_li[right:] return merge_sortted_li

6.6归并排序测试

if __name__ == '__main__':
alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
print("before sort: %s" % alist)
sorted_alist = merge_sort(alist)
print("after sort: %s" % alist)
print("sorted new list: %s" % sorted_alist)

最新文章

  1. 理解Docker(3):Docker 使用 Linux namespace 隔离容器的运行环境
  2. 学习 easyui 之一:easyloader 分析与使用
  3. Smart210---LED驱动
  4. Spring Auto-Wiring Beans with @Autowired annotation
  5. Swift语言Auto Layout入门教程:上篇
  6. 流动python - 什么是魔术方法(magic method)
  7. java实现树型结构样式
  8. Docker端口映射实现
  9. .net core使用App.Metrics+InfluxDB+Grafana进行APM监控
  10. C#学习笔记14——TRACE、DEBUG和TRACESOURCE的使用以及日志设计
  11. INTERVAL YEAR TO MONTH数据类型
  12. Javascript 实现复制(Copy)动作方法大全
  13. JS中的!=、== 、!==、===的用法和区别
  14. 时间序列预测——Tensorflow.Keras.LSTM
  15. flex 总结
  16. ArcGIS Desktop python Add-in Python 插件的文件结构
  17. Springboot以war包方式运行
  18. [Node.js]27. Level 5: URL Building &amp; Doing the Request
  19. python3菜鸟教程
  20. windows批量删除ip

热门文章

  1. Java实现九阶数独
  2. java实现 洛谷 P1014 Cantor表
  3. Python API自动化测试实操
  4. Zabbix+Orabbix监控oracle数据库表空间
  5. iOSdelegate、Notification、block区别
  6. Node.js环境安装
  7. springboot整合Mybatis(无xml)
  8. python中的importlib包
  9. VSCode + WSL 2 + Ruby环境搭建详解
  10. Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法