def sort_choice(numbers, max_to_min=True):

"""

我这没有按照标准的选择排序,假设列表长度为n,思路如下:

1、获取最大值x,将x移动到列最后。[n1, n2, n3, ... nn]

2、将x追加到排序结果[n1, n3, ... nn, n2]

3、获取排序后n-1个元素[n1, n3, ... nn],重复第一步,重复n-1次。

max_to_min是指从大到小排序,默认为true;否则从小到大排序。

对[8, 4, 1, 0, 9]排序,大致流程如下:

sorted_numbers = []

[8, 4, 1, 0, 9], sorted_numbers = [9]

[4, 1, 0, 8], sorted_numbers = [9, 8]

[1, 0, 4], sorted_numbers = [9, 8, 4]

[0, 1], sorted_numbers = [9, 8, 4, 1]

[0], sorted_numbers = [9, 8, 4, 1, 0]

"""

if len(numbers) <= 1:

return numbers

sorted_list = []

index = 0

for i in xrange(len(numbers) - index):

left_numbers = _get_left_numbers(numbers, max_to_min)

numbers = left_numbers[:-1]

sorted_list.append(left_numbers[-1])

index += 1

return sorted_list

def _get_left_numbers(numbers, get_max=True):

'''

获取最大值或者最小值x,并且将x抽取出来,置于列表最后.

Ex: get_max=True, [1, 4, 3] ⇒ [1, 3, 4]

get_max=False, [1, 4, 3] ⇒ [4, 3 ,1]

'''

max_index = 0

for i, num in enumerate(numbers):

if get_max:

if num > numbers[max_index]:

max_index = i

else:

if num < numbers[max_index]:

max_index = i

numbers = numbers[:max_index] + numbers[max_index + 1:] + [numbers[max_index]]

return numbers

测试一下:

>>> get_left_numbers([0, 4, 0, 31, 9, 19, 89,67], get_max=True)

[0, 4, 0, 31, 9, 19, 67, 89]

>>> get_left_numbers([0, 4, 0, 31, 9, 19, 89,67], get_max=False)

[4, 0, 31, 9, 19, 89, 67, 0]

>>> sort_choice([0, 4, 0, 31, 9, 19, 89,67], max_to_min=False)

[0, 0, 4, 9, 19, 31, 67, 89]

>>> sort_choice([0, 4, 0, 31, 9, 19, 89,67], max_to_min=True)

[89, 67, 31, 19, 9, 4, 0, 0]

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

相关文章

相关视频

php和python的选择排序算法,图文讲解选择排序算法的原理及在Python中的实现相关推荐

  1. 排序算法之冒泡算法的讲解以及此算法的优缺点

    **排序算法之冒泡算法的讲解以及此算法的优缺点** **冒泡排序算法是非常常见的一种排序算法,通常用于对数组元素的排序,究竟什么是冒泡排序? ** 一桶水中如果气泡共同处在一个维度或者说处在同一个水平 ...

  2. C++动态内存管理好难怎么办?零基础图文讲解,小白轻松理解原理

    首先我们先了解一下内存: C语言使用malloc/free动态管理内存空间,C++引入了new/delete,new[]/delete[]来动态管理内存. 如果大家在自学C++中遇到困难,想找一个学习 ...

  3. 八大排序算法图文讲解

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 常见的内部排序算法有:插入排序.希尔排序. ...

  4. 8大排序算法图文讲解

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 常见的内部排序算法有:插入排序.希尔排序. ...

  5. 8大排序算法图文讲解转

    本文链接:http://www.cricode.com/3212.html 作者:快课网--Jay13  转载请务必保留作者出处,谢谢! 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中 ...

  6. 八大排序 —— 详细图文讲解

    文章目录 排序的概念 常见的排序算法 冒泡排序 堆排序 插入排序 希尔排序(缩小增量排序) 选择排序 快速排序 划分 一.Hoare版本 二.挖坑法 三.前后指针 整体排序--递归 优化 针对选key ...

  7. 八大排序的思想讲解与排序算法可视化

      可视化的动图可以帮助我们理解排序算法,在了解了排序算法的思想后,观察动图可以加深我们对排序算法的理解.   本文全部代码已上传Gitee. 文章目录 一.插入排序 1.直接插入排序 2.希尔排序 ...

  8. java 奇偶数据排序算法,简单讲解奇偶排序算法及在Java数组中的实现

    简单讲解奇偶排序算法及在Java数组中的实现 奇偶排序是一个比较有个性的排序,基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序 举例吧, 待排数组 [6 2 4 1 5 9] ...

  9. 银行家算法例题讲解_银行家算法

    死锁常见的题目 定义 所谓死锁,是指多个进程循环等待它方占有的资源而无限期地僵持下去的局面.死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用, ...

最新文章

  1. 深入理解PHP原理之变量作用域
  2. (邓爱萍)类对象-this关键字
  3. 苹果6sp内存可以扩展吗_苹果手机iPhone 12 mini能用6年吗?网友:可以
  4. 拉格朗日差值法----算法学习
  5. 关于程序员的脑筋急转弯(附答案)
  6. 从OA、ERP到大数据中心,一个完整的数据分析体系原来是这样
  7. java day40【会话技术:Cookie 、会话技术:Session 、JSP:入门学习】
  8. 学习笔记-大数据之路-数据模型篇-建模综述
  9. 自建nod32更新服务器,ESET NOD32镜像更新服务器
  10. thinkphp的这些扩展插架你都知道吗?
  11. 构建自己的人脉网络——高科技人才在跨国大公司的生存之道(四)
  12. 汽车“新四化”,如何扬长避短?
  13. Windows电脑蓝牙打电话-预研总结
  14. 动手开发一个有用的 ABAP ALV 工具 - 查看指定用户的 ABAP 传输请求试读版
  15. 入门oracleDBA面试题
  16. 【一起学Rust | 开源项目】效率提升工具espanso——在日常输入中使用代码提示
  17. PHP安装包TS和NTS的区别
  18. 微信移动端招聘项目总结
  19. 软件工程-团队项目-班级网站软件需求规格说明书
  20. 电脑箭头,电脑箭头符号怎么打出来(往返箭头符号图案)

热门文章

  1. 如何使用 rsync 备份 Linux 系统的一些介绍
  2. 快递春节停运时间表刷屏,假的!但或涨价10-20元
  3. Code Snippets
  4. Android:CheckBox控件
  5. 人脸识别大规模爆发!
  6. maven打包jar上传到nexus
  7. 如何快速在Linux系统的硬盘上创建大文件
  8. Git学习教程(一):git简介
  9. 转 C# 串口编程遇到的问题以及解决方法
  10. Computer Browser服务不能启动