优化选择排序算法,大致思路是每次循环分别找到最大值和最小值,放到列表的头部和尾部

代码如下:

#! 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选择排序算法(三)相关推荐

  1. qpython能使用json吗l_[python] 详解Python在使用JSON时需要注意的编码问题

    Python 中的字符编码 在 Python3 中, 字符 在内存中是使用 Unicode 存储的, 常规的字符使用 两个字节 表示, 一些很生僻的字符就需要 四个字节. 默认使用 Unicode 存 ...

  2. map函数的用法python,详解Python map函数及Python map()函数的用法

    python map函数 map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list ...

  3. python交叉验证法_详解python实现交叉验证法与留出法

    在机器学习中,我们经常在训练集上训练模型,在测试集上测试模型.最终的目标是希望我们的模型在测试集上有最好的表现. 但是,我们往往只有一个包含m个观测的数据集D,我们既要用它进行训练,又要对它进行测试. ...

  4. python 协程可以嵌套协程吗_Python | 详解Python中的协程,为什么说它的底层是生成器?...

    今天是Python专题的第26篇文章,我们来聊聊Python当中的协程. 我们曾经在golang关于goroutine的文章当中简单介绍过协程的概念,我们再来简单review一下.协程又称为是微线程, ...

  5. python选择排序从大到小_经典排序算法和Python详解之(一)选择排序和二元选择排序...

    本文源自微信公众号[Python编程和深度学习]原文链接:经典排序算法和Python详解之(一)选择排序和二元选择排序,欢迎扫码关注鸭! 扫它!扫它!扫它 排序算法是<数据结构与算法>中最 ...

  6. 一文速学数模-时序预测模型(四)二次指数平滑法和三次指数平滑法详解+Python代码实现

    目录 前言 二次指数平滑法(Holt's linear trend method) 1.定义 2.公式 二次指数平滑值: 二次指数平滑数学模型: 3.案例实现 三次指数平滑法(Holt-Winters ...

  7. python expandtabs_详解Python中expandtabs()方法的使用

    详解Python中expandtabs()方法的使用 expandtabs()方法返回制表符,即该字符串的一个副本. '\t'已经使用的空间,可选择使用给定的tabsize(默认8)扩展. 语法 以下 ...

  8. 【可解释性机器学习】详解Python的可解释机器学习库:SHAP

    详解Python的可解释机器学习库:SHAP SHAP介绍 SHAP的用途 SHAP的工作原理 解释器Explainer 局部可解释性Local Interper 单个prediction的解释 多个 ...

  9. python利器的使用-图文详解python开发利器之ulipad的使用实践

    Ulipad是一个国人limodou编写的专业Python编辑器,它基于wxpython开发的GUI(图形化界面).下面这篇文章主要介绍了python开发利器之ulipad的使用实践,文中介绍的非常详 ...

最新文章

  1. Horticulture Research:植物界的“投之以桃,报之以李”的合作共赢典范
  2. 时间转换竟多出1年!Java开发中的20个坑你遇到过几个?
  3. 老板喜欢动脑子工作的人
  4. mysql怎么导入sql文件_如何将sql文件导入mysql
  5. Nodejs读写Json文件
  6. TIT 计算机图形学 实验一 十二面体线框模型
  7. Asp.Net 企业微信JS-SDK开发(随手笔记)
  8. 【19】processing-硬件(中文)
  9. 今日头条适配方案_ 今日头条大改版,小程序强势登场
  10. 工业生产ERP系统常见的五大统计分析功能
  11. 用xcode编译c++代码
  12. 社区无人便利店APP开发解决方案
  13. 10个优秀的AI艺术生成器
  14. YAGEO(国巨)旧电脑风扇制作风力发电机步骤详解 - 电动机控制电路图
  15. 如何利用在vue中echart 生成全国、省、市地图
  16. 数据库课程设计--高校机房管理系统
  17. 游戏背景音乐风格大致分类
  18. 沃顿商学院6个最受欢迎的工商管理课程
  19. Bitmap的创建使用( 一)
  20. SpringSecurity - 启动流程分析(八)- CsrfFilter 过滤器

热门文章

  1. boost::process::std_in相关的测试程序
  2. boost::mp11::mp_clear相关用法的测试程序
  3. boost::math模块计算贝塞尔函数的零点的测试程序
  4. boost::function_types::is_member_pointer用法的测试程序
  5. boost::gregorian模块实现使用公历精确地推进一个月的测试程序
  6. boost::contract模块实现ifdef宏功能测试程序
  7. Boost:双图bimap与mi_hashed indices索引的测试程序
  8. ITK:重视Valued图像的区域最小值
  9. ITK:创建一个RGB图像
  10. VTK:图片之ImageFFT