选择排序迭代-python
2023-09-11 14:16:17 时间
简单选择排序:
import random
m=[x+1 for x in range(9)]
random.shuffle(m)
awe=[
m,
[x for x in range(1,10)],
[x-1 for x in range(10,1,-1)],
[1 for x in range(9)]
]
print(awe,end='\n')
for v in awe:
count_iter=0
count_swap=0
for b in range(len(v)):
maxIndex=b
for c in range(b+1,len(v)):
count_iter+=1
if v[maxIndex] < v[c]:
maxIndex=c
if b != maxIndex:
count_swap+=1
v[b],v[maxIndex]=v[maxIndex],v[b]
print(v,count_iter,count_swap,end='\n')
print(awe)
二元选择排序:
import random
m=[x+1 for x in range(9)]
random.shuffle(m)
awe=[
m,
[x for x in range(1,10)],
[x-1 for x in range(10,1,-1)],
[1 for x in range(9)]
]
print(awe,end='\n')
for v in awe:
count_iter=0
count_swap=0
for b in range(len(v)//2):
maxIndex=b
minIndex=-b-1
minOrigin=minIndex # 记录最小索引的原始记录
# 迭代寻找最大值索引和最小值索引
for x in range(b+1,len(v)-b):
count_iter+=1
if v[maxIndex] < v[x]:
maxIndex=x
if v[minIndex] > v[-x-1]:
minIndex=-x-1
# 进行最大值的交换
if b != maxIndex:
v[maxIndex],v[b]=v[b],v[maxIndex]
count_swap+=1
# 如果b为最小值,那么肯定被交换,且对最小值交换造成影响,需更正最小值索引
# minIndex == b 为正索引情况,minIndex == b-len(v)为负索引情况
if minIndex == b or minIndex == b-len(v):
minIndex=maxIndex
# 进行最小值的交换
if minIndex != minOrigin:
count_swap+=1
v[minIndex],v[minOrigin]=v[minOrigin],v[minIndex]
print(v,count_iter,count_swap,end='\n')
print(awe)
加入等值元素,和minOrigin索引对应值发生改变的情况,进一步改进算法
import random
m=[x+1 for x in range(9)]
random.shuffle(m)
awe=[
m,
[x for x in range(1,10)],
[x-1 for x in range(10,1,-1)],
[1 for x in range(9)],
[1,1,1,1,1,1,1,1,1,2]
]
print(awe,end='\n')
for v in awe:
count_iter=0
count_swap=0
for b in range(len(v)//2):
maxIndex=b
minIndex=-b-1
minOrigin=minIndex # 记录最小索引的原始记录
# 迭代寻找最大值索引和最小值索引
for x in range(b+1,len(v)-b):
count_iter+=1
if v[maxIndex] < v[x]:
maxIndex=x
if v[minIndex] > v[-x-1]:
minIndex=-x-1
# 最大索引值和最小索引值相等,说明剩下的所有元素相等
if v[maxIndex] == v[minIndex]:
break
# 进行最大值的交换
if b != maxIndex:
v[maxIndex],v[b]=v[b],v[maxIndex]
count_swap+=1
# 如果b为最小值,那么肯定被交换,且对最小值交换造成影响,需更正最小值索引
# minIndex == b 为正索引情况,minIndex == b-len(v)为负索引情况
if minIndex == b or minIndex == b-len(v):
minIndex=maxIndex
# 进行最小值的交换,进行最大索引值交换时,可能对minOrigin索引对应的值进行交换,加入判断减少交换
if minIndex != minOrigin and v[minIndex] != v[minOrigin]:
count_swap+=1
v[minIndex],v[minOrigin]=v[minOrigin],v[minIndex]
print(v,count_iter,count_swap,end='\n')
print(awe)
相关文章
- Python脚本扫描给定网段的MAC地址表(scapy或 python-nmap)
- 实用 | 利用 aardio 配合 Python 快速开发桌面应用
- python与C++的效率区别、模型部署/ONNXRuntime/tensorrt
- 零基础学员必看的python课程大纲
- 2023版python安装教程奉上,Python永久使用 超详细版,一看就会【小白友好】
- 每天一个python小知识——如何在Python 3中转换数据类型
- 零基础自学Python需要多长时间从入门到精通?学python能兼职挣钱吗?怎么挣钱?
- python sys模块详解
- 详解Python中的闭包
- gyp ERR! stack Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.
- 【大数据】+python+淘宝商品爬取
- python实现桶排序算法
- 《Python Cookbook(第3版)中文版》——1.14 对不原生支持比较操作的对象排序
- 【21天学习经典算法】直接选择排序(附Python完整代码)
- 顶级 Python 机器学习库
- Python AI教程之您应该在下一个项目中使用的 7 个有用的深度学习库
- 【Python 八股文】- 常见的排序算法
- 【Python分布式服务框架】python实现gRPC服务
- python之enumerate函数:获取列表中每个元素的索引和值
- 36、【排序】快速排序实现(C/C++版+Python版本)
- python循环else语法
- python中的timeit模块使用
- python批量更新翻译文件--odoo自定义更新
- 2.1 The Python Interpreter(python解释器)
- python基础:sort和sorted排序
- 【Python】排序你学废了吗,茴香豆有四种写法,排序有十种写法