选择排序法python详解-Python选择排序算法(三)
优化选择排序算法,大致思路是每次循环分别找到最大值和最小值,放到列表的头部和尾部
代码如下:
#! coding:utf8
import random
def select_sort(arr):
for i in range(len(arr) - 1):
min_position = i
max_position = i
for j in range(i + 1, len(arr) - i):
min_position = j if arr[min_position] > arr[j] else min_position
max_position = max_position if arr[max_position] > arr[j] else j
if arr[min_position] < arr[max_position]:
print(arr[min_position], arr[max_position])
start_pos = arr[i]
arr[i] = arr[min_position]
arr[min_position] = start_pos
for jj in range(i + 1, len(arr) - i):
max_position = max_position if arr[max_position] > arr[jj] else jj
end_pos = arr[-i - 1]
arr[-i - 1] = arr[max_position]
arr[max_position] = end_pos
print("循环结果:", arr)
if __name__ == "__main__":
arr_list = [each for each in range(20)]
random.shuffle(arr_list)
print("原始列表:", arr_list)
select_sort(arr_list)
随机产生一个长度为二十的乱序列表,进行排序,中间过程和结果如下:
原始列表: [9, 5, 1, 6, 2, 16, 15, 19, 7, 4, 10, 18, 17, 13, 0, 8, 11, 12, 14, 3]
0 19
循环结果: [0, 5, 1, 6, 2, 16, 15, 3, 7, 4, 10, 18, 17, 13, 9, 8, 11, 12, 14, 19]
1 18
循环结果: [0, 1, 5, 6, 2, 16, 15, 3, 7, 4, 10, 14, 17, 13, 9, 8, 11, 12, 18, 19]
2 17
循环结果: [0, 1, 2, 6, 5, 16, 15, 3, 7, 4, 10, 14, 12, 13, 9, 8, 11, 17, 18, 19]
3 16
循环结果: [0, 1, 2, 3, 5, 11, 15, 6, 7, 4, 10, 14, 12, 13, 9, 8, 16, 17, 18, 19]
4 15
循环结果: [0, 1, 2, 3, 4, 11, 8, 6, 7, 5, 10, 14, 12, 13, 9, 15, 16, 17, 18, 19]
5 14
循环结果: [0, 1, 2, 3, 4, 5, 8, 6, 7, 11, 10, 9, 12, 13, 14, 15, 16, 17, 18, 19]
6 13
循环结果: [0, 1, 2, 3, 4, 5, 6, 8, 7, 11, 10, 9, 12, 13, 14, 15, 16, 17, 18, 19]
7 12
循环结果: [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 10, 9, 12, 13, 14, 15, 16, 17, 18, 19]
8 11
循环结果: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
9 10
循环结果: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
选择排序法python详解-Python选择排序算法(三)相关推荐
- qpython能使用json吗l_[python] 详解Python在使用JSON时需要注意的编码问题
Python 中的字符编码 在 Python3 中, 字符 在内存中是使用 Unicode 存储的, 常规的字符使用 两个字节 表示, 一些很生僻的字符就需要 四个字节. 默认使用 Unicode 存 ...
- map函数的用法python,详解Python map函数及Python map()函数的用法
python map函数 map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list ...
- python交叉验证法_详解python实现交叉验证法与留出法
在机器学习中,我们经常在训练集上训练模型,在测试集上测试模型.最终的目标是希望我们的模型在测试集上有最好的表现. 但是,我们往往只有一个包含m个观测的数据集D,我们既要用它进行训练,又要对它进行测试. ...
- python 协程可以嵌套协程吗_Python | 详解Python中的协程,为什么说它的底层是生成器?...
今天是Python专题的第26篇文章,我们来聊聊Python当中的协程. 我们曾经在golang关于goroutine的文章当中简单介绍过协程的概念,我们再来简单review一下.协程又称为是微线程, ...
- python选择排序从大到小_经典排序算法和Python详解之(一)选择排序和二元选择排序...
本文源自微信公众号[Python编程和深度学习]原文链接:经典排序算法和Python详解之(一)选择排序和二元选择排序,欢迎扫码关注鸭! 扫它!扫它!扫它 排序算法是<数据结构与算法>中最 ...
- 一文速学数模-时序预测模型(四)二次指数平滑法和三次指数平滑法详解+Python代码实现
目录 前言 二次指数平滑法(Holt's linear trend method) 1.定义 2.公式 二次指数平滑值: 二次指数平滑数学模型: 3.案例实现 三次指数平滑法(Holt-Winters ...
- python expandtabs_详解Python中expandtabs()方法的使用
详解Python中expandtabs()方法的使用 expandtabs()方法返回制表符,即该字符串的一个副本. '\t'已经使用的空间,可选择使用给定的tabsize(默认8)扩展. 语法 以下 ...
- 【可解释性机器学习】详解Python的可解释机器学习库:SHAP
详解Python的可解释机器学习库:SHAP SHAP介绍 SHAP的用途 SHAP的工作原理 解释器Explainer 局部可解释性Local Interper 单个prediction的解释 多个 ...
- python利器的使用-图文详解python开发利器之ulipad的使用实践
Ulipad是一个国人limodou编写的专业Python编辑器,它基于wxpython开发的GUI(图形化界面).下面这篇文章主要介绍了python开发利器之ulipad的使用实践,文中介绍的非常详 ...
最新文章
- Horticulture Research:植物界的“投之以桃,报之以李”的合作共赢典范
- 时间转换竟多出1年!Java开发中的20个坑你遇到过几个?
- 老板喜欢动脑子工作的人
- mysql怎么导入sql文件_如何将sql文件导入mysql
- Nodejs读写Json文件
- TIT 计算机图形学 实验一 十二面体线框模型
- Asp.Net 企业微信JS-SDK开发(随手笔记)
- 【19】processing-硬件(中文)
- 今日头条适配方案_ 今日头条大改版,小程序强势登场
- 工业生产ERP系统常见的五大统计分析功能
- 用xcode编译c++代码
- 社区无人便利店APP开发解决方案
- 10个优秀的AI艺术生成器
- YAGEO(国巨)旧电脑风扇制作风力发电机步骤详解 - 电动机控制电路图
- 如何利用在vue中echart 生成全国、省、市地图
- 数据库课程设计--高校机房管理系统
- 游戏背景音乐风格大致分类
- 沃顿商学院6个最受欢迎的工商管理课程
- Bitmap的创建使用( 一)
- SpringSecurity - 启动流程分析(八)- CsrfFilter 过滤器
热门文章
- boost::process::std_in相关的测试程序
- boost::mp11::mp_clear相关用法的测试程序
- boost::math模块计算贝塞尔函数的零点的测试程序
- boost::function_types::is_member_pointer用法的测试程序
- boost::gregorian模块实现使用公历精确地推进一个月的测试程序
- boost::contract模块实现ifdef宏功能测试程序
- Boost:双图bimap与mi_hashed indices索引的测试程序
- ITK:重视Valued图像的区域最小值
- ITK:创建一个RGB图像
- VTK:图片之ImageFFT