Python-数据结构-最全六种排序代码实现
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)
Python-数据结构-最全六种排序代码实现的更多相关文章
- python 数据结构与算法之排序(冒泡,选择,插入)
目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习 ...
- python数据结构-最全的六种排序
1.冒泡排序: 比较相邻的元素,如果第一个比第二个大,那就交换位置 让大的元素跟下一个相邻的元素作比较,如果大于交换位置 对所有元素重复以上步骤(除了最后一个),直到没有任何一个需要作对比 2.选择排 ...
- python数据结构与算法——桶排序
桶排序的时间复杂度是O(M+N),通过建立对原始数据的有序统计表,实现非常快速的排序过程 可以用hashtable(或者dict)实现,查询复杂度为O(1) 贴代码: # 简单桶排序 从小到大 def ...
- Python 数据结构与算法——桶排序
#简单的桶排序 def bucksort(A): bucks = dict() # 定义一个桶变量,类型为字典 for i in A: bucks.setdefault(i,[]) # 每个桶默认为空 ...
- Python数据结构与算法(排序)
https://www.cnblogs.com/fwl8888/p/9315730.html
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- 数据结构 - 只需选择排序(simple selection sort) 详细说明 和 代码(C++)
数据结构 - 只需选择排序(simple selection sort) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/28601 ...
- 基于python的七种经典排序算法
参考书目:<大话数据结构> 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
随机推荐
- Java实现 LeetCode 290 单词规律
290. 单词规律 给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律. 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非 ...
- Java实现 LeetCode 240 搜索二维矩阵 II(二)
240. 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. ...
- java算法集训代码填空题练习2
1 连续数的公倍数 为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致. 但也并非纯粹的偶然:60是个优秀的数字,它的因子比较多. 事实上,它是1至6的每个数字的倍数.即1,2,3,4, ...
- java实现第五届蓝桥杯殖民地
殖民地 带着殖民扩张的野心,Pear和他的星际舰队登上X星球的某平原.为了评估这块土地的潜在价值,Pear把它划分成了M*N格,每个格子上用一个整数(可正可负)表示它的价值. Pear要做的事很简单- ...
- java实现第五届蓝桥杯写日志
写日志 写日志是程序的常见任务.现在要求在 t1.log, t2.log, t3.log 三个文件间轮流 写入日志.也就是说第一次写入t1.log,第二次写入t2.log,... 第四次仍然 写入t1 ...
- PAT 统计同成绩学生
本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第 1 行给出不超过 105 的正整数 N,即学生总人数.随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔 ...
- Python 网络爬虫基本概念篇
爬虫的概念 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.这是百度百科对爬虫的定义,其实,说简单点,爬虫 ...
- JSP+SSM+Mysql实现的学生成绩管理系统
项目简介 项目来源于:https://gitee.com/z77z/StuSystem 本系统是基于JSP+SSM+Mysql实现的学生成绩管理系统.主要实现的功能有教师管理.学生管理.课程管理.学生 ...
- 使用Docker搭建Nextcloud SSL站点
1.启动mariadb docker run -d \ --name mysql \ -e MYSQL_ROOT_PASSWORD=<你的mysql密码> \ -p 13306:3306 ...
- JavaScript转换json
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...