php和python的选择排序算法,图文讲解选择排序算法的原理及在Python中的实现
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中的实现相关推荐
- 排序算法之冒泡算法的讲解以及此算法的优缺点
**排序算法之冒泡算法的讲解以及此算法的优缺点** **冒泡排序算法是非常常见的一种排序算法,通常用于对数组元素的排序,究竟什么是冒泡排序? ** 一桶水中如果气泡共同处在一个维度或者说处在同一个水平 ...
- C++动态内存管理好难怎么办?零基础图文讲解,小白轻松理解原理
首先我们先了解一下内存: C语言使用malloc/free动态管理内存空间,C++引入了new/delete,new[]/delete[]来动态管理内存. 如果大家在自学C++中遇到困难,想找一个学习 ...
- 八大排序算法图文讲解
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 常见的内部排序算法有:插入排序.希尔排序. ...
- 8大排序算法图文讲解
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 常见的内部排序算法有:插入排序.希尔排序. ...
- 8大排序算法图文讲解转
本文链接:http://www.cricode.com/3212.html 作者:快课网--Jay13 转载请务必保留作者出处,谢谢! 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中 ...
- 八大排序 —— 详细图文讲解
文章目录 排序的概念 常见的排序算法 冒泡排序 堆排序 插入排序 希尔排序(缩小增量排序) 选择排序 快速排序 划分 一.Hoare版本 二.挖坑法 三.前后指针 整体排序--递归 优化 针对选key ...
- 八大排序的思想讲解与排序算法可视化
可视化的动图可以帮助我们理解排序算法,在了解了排序算法的思想后,观察动图可以加深我们对排序算法的理解. 本文全部代码已上传Gitee. 文章目录 一.插入排序 1.直接插入排序 2.希尔排序 ...
- java 奇偶数据排序算法,简单讲解奇偶排序算法及在Java数组中的实现
简单讲解奇偶排序算法及在Java数组中的实现 奇偶排序是一个比较有个性的排序,基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序 举例吧, 待排数组 [6 2 4 1 5 9] ...
- 银行家算法例题讲解_银行家算法
死锁常见的题目 定义 所谓死锁,是指多个进程循环等待它方占有的资源而无限期地僵持下去的局面.死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用, ...
最新文章
- 深入理解PHP原理之变量作用域
- (邓爱萍)类对象-this关键字
- 苹果6sp内存可以扩展吗_苹果手机iPhone 12 mini能用6年吗?网友:可以
- 拉格朗日差值法----算法学习
- 关于程序员的脑筋急转弯(附答案)
- 从OA、ERP到大数据中心,一个完整的数据分析体系原来是这样
- java day40【会话技术:Cookie 、会话技术:Session 、JSP:入门学习】
- 学习笔记-大数据之路-数据模型篇-建模综述
- 自建nod32更新服务器,ESET NOD32镜像更新服务器
- thinkphp的这些扩展插架你都知道吗?
- 构建自己的人脉网络——高科技人才在跨国大公司的生存之道(四)
- 汽车“新四化”,如何扬长避短?
- Windows电脑蓝牙打电话-预研总结
- 动手开发一个有用的 ABAP ALV 工具 - 查看指定用户的 ABAP 传输请求试读版
- 入门oracleDBA面试题
- 【一起学Rust | 开源项目】效率提升工具espanso——在日常输入中使用代码提示
- PHP安装包TS和NTS的区别
- 微信移动端招聘项目总结
- 软件工程-团队项目-班级网站软件需求规格说明书
- 电脑箭头,电脑箭头符号怎么打出来(往返箭头符号图案)