python排序(冒泡、直接选择、直接插入等)
2024-08-28 13:29:08
冒泡排序
冒泡法:第一趟:相邻的两数相比,大的往下沉。最后一个元素是最大的。
第二趟:相邻的两数相比,大的往下沉。最后一个元素不用比。
#冒泡排序
array = [1,5,6,2,9,4,3]
def bubble_sort(array):
for i in range(len(array)-1):
for j in range(len(array)-i-1):
if array[j] > array[j+1]:
array[j],array[j+1] = array[j+1],array[j]
return array bubble = bubble_sort(array)
print(bubble)
时间复杂度:O(n^2)
稳定性:稳定
改进:如果一趟比较没有发生位置变换,则认为排序完成
array = [1,2,3,5,7]
def bubble_sort(array):
for i in range(len(array)-1):
flag = 1 #建立标志位
for j in range(len(array)-i-1):
if array[j] > array[j+1]:
array[j],array[j+1] = array[j+1],array[j]
flag = 0
if not flag:
break
return array bubble = bubble_sort(array)
print(bubble)
直接选择排序
选择排序法:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放到序列的起始位置,直到全部排完。
def select_sort(array):
for i in range(len(array)-1):
min = i
for j in range(i+1, len(array)):
if array[j] < array[min]:
min = j
array[i], array[min] = array[min], array[i]
return array array = [1,5,6,2,9,4,3]
select = select_sort(array)
print(select)
直接插入排序
列表被分为有序区和无序区两个部分。最初有序区只有一个元素。
每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空。
其实就相当于摸牌:
def insert_sort(array):
# 循环的是第二个到最后(待摸的牌)
for i in range(1, len(array)):
# 待插入的数(摸上来的牌)
min = array[i]
# 已排好序的最右边一个元素(手里的牌的最右边)
j = i - 1
# 一只和排好的牌比较,排好的牌的牌的索引必须大于等于0
# 比较过程中,如果手里的比摸上来的大,
while j >= 0 and array[j] < min:
# 那么手里的牌往右边移动一位,就是把j付给j+1
array[j+1] = array[j]
# 换完以后在和下一张比较
j -= 1
# 找到了手里的牌比摸上来的牌小或等于的时候,就把摸上来的放到它右边
else:array[j+1] = min
return array list=[5,6,1,2,8,3,4]
print(insert_sort(list))
最新文章
- Angularjs环境搭建
- phpstudy 局域网访问
- sysbench测试服务器性能
- Entity Framework 异常档案
- zoj 3591 Nim 博弈论
- 【零基础学习iOS开发】【02-C语言】09-流程控制
- redis 记录
- VS2008编程软件过期的问题,过期弹出须要升级窗体的解决的方法
- [置顶] Objective-C ,ios,iphone开发基础:在UITextField输入完以后,隐藏键盘,
- Haskell Json数据处理
- extjs 6.2 helloworld
- WPF实现只打开一个窗口,并且重复打开时已经打开的窗口置顶
- Java基于opencv实现图像数字识别(三)—灰度化和二值化
- 我写的.net相关的文章
- java中使用阻塞队列实现生产这与消费这之间的关系
- 前端 HTML 常用标签 head标签相关内容 style标签 定义内部样式表
- 算法初步——two pointers
- Vulkan Tutorial 01 开发环境搭建之Windows
- vue服务端渲染浏览器端缓存(keep-alive)
- 带参数的main函数
热门文章
- windows修改远程桌面RDP连接数
- SQL一对多特殊查询,取唯一一条
- 每天一道算法题(4)——O(1)时间内删除链表节点
- [51nod1384]全排列
- AngularJs(Part 11)--自定义Directive
- 把Nutch爬虫部署到Hadoop集群上
- Mahout0.9 – Clustering (聚类篇)
- Jmeter JDBC Request的sql语句不支持;号
- JavaScript学习系列2一JavaScript中的变量作用域
- Eclipse提交svn错误svn E210003 connection refused by the server