写文章主要是记录自己每天学习的东西,本篇文章主要介绍数据结构中常用的简单的排序算法,虽然这些算法用Python实现起来不是十分的高效,不如c、java之类的运行速度快,应用Python实现主要是为了:1、证明我已经理解了这些算法,2、实现算法可以给自己带来莫名的成就感,这也算是自己的一点积累吧,多少年后,看了这些文章会有些许的自豪吧,好了,言归正传,进入今天的正题:简单排序算法之选择、冒泡、插入排序。

1、选择排序

选择排序是最直观的一种排序思想,但是其是一种不稳定的排序方法。

主要思想:每次从待排序的元素中选出最小或最大的一个元素,放在序列的起始位置,然后在从剩下的序列中继续寻找最小或最大的元素,直接序列剩下一个元素为止。

def select_sort(origin_items, desc=False):"""选择排序origin_items 为待排序序列desc表示是否为降序,默认为升序"""than = '<' if desc else '>'for i in range(len(origin_items) - 1):min_index = ifor j in range(i + 1, len(origin_items)):if eval(str(origin_items[i])+than+str(origin_items[j])):min_index = jorigin_items[i],origin_items[min_index] = origin_items[min_index],origin_items[i]return origin_items

2、冒泡排序

主要思想:从序列的第一个元素开始逐个与它后面的每个元素进行比较,如果满足条件(大于或小于)则交换两个元素,否则继续向后比较,直接结束。

def bubble_sort(origin_items, desc=False):'''冒泡排序'''than = '<' if desc else '>'for i in range(len(origin_items)-1):for j in range(i+1,len(origin_items)):if eval(str(origin_items[i])+than+str(origin_items[j])):#交换两个元素的位置 origin_items[i],origin_items[j] = origin_items[j],origin_items[i]return origin_items

3、插入排序

主要思想:将数据分为有序和无序两部分,通常将第一个元素设置为有序部分,剩下的元素设置为无序部分,每次从无序部分的第一个元素开始与有序部分的元素从后向前逐个比较,找到插入位置将元素插入到有序部分中,直到数据都是有序部分为止。

def insert_sort(origin_items, desc=False):'''插入排序'''than = '>' if desc else '<'for i in range(1,len(origin_items)):for j in range(i,0,-1):if eval(str(origin_items[j]) + than + str(origin_items[j-1])):origin_items[j],origin_items[j-1] = origin_items[j-1],origin_items[j]return origin_items

验证:

a = [10,2,44,2,4,5,7,3,445,24]
print('选择排序升序结果为:',select_sort(a))
print('选择排序降序结果为:',select_sort(a,True))print('冒泡排序升序结果为:',bubble_sort(a))
print('冒泡排序降序结果为:',bubble_sort(a,True))print('插入排序升序结果为:',insert_sort(a))
print('插入排序降序结果为:',insert_sort(a,True))

结果为:

如果感兴趣的欢迎关注公众账号:洞察数据挖掘价值。

python sort 部分元素_Python 简单排序算法-选择、冒泡、插入排序实现相关推荐

  1. python sort 部分元素_Python 犄角旮旯--List

    列表的构建 List 是 Python 中最常用的容器之一,它是一个可变(mutable)容器,也就是说 List 的内容可以被修改,这也意味着它不能作为 Dict 的 key,也不能出现在 set ...

  2. python字典删除元素_Python简单遍历字典及删除元素的方法

    本文实例讲述了Python简单遍历字典及删除元素的方法.分享给大家供大家参考,具体如下: 这种方式是一定有问题的: d = {'a':1, 'b':2, 'c':3} for key in d: d. ...

  3. c++简单排序算法(冒泡、选择以及调用algorithm中的sort函数)

    排序 冒泡排序 定义: 概述: 冒泡排序中,在每一轮的排序中,总能把最小或是最大的一个数字排到末端,然后下一次就不再次访问这个元素,直至所有元素排列完成. 代码: for (int i = 1; i ...

  4. python提取数组元素_python简单获取数组元素个数的方法

    python简单获取数组元素个数的方法 更新时间:2015年07月13日 17:54:46 作者:pythoner 这篇文章主要介绍了python简单获取数组元素个数的方法,实例分析了Python中l ...

  5. python八大排序算法 间书_Python 八大排序算法速度比较

    这篇文章并不是介绍排序算法原理的,纯粹是想比较一下各种排序算法在真实场景下的运行速度. 算法由 Python 实现,用到了一些语法糖,可能会和其他语言有些区别,仅当参考就好. 测试的数据是自动生成的, ...

  6. 一文读懂Python版的十大经典排序算法(附动图演示)

    来源:大数据DT 本文约5200字,建议阅读10分钟 排序算法是<数据结构与算法>中最基本的算法之一.本文介绍10种常见的内部排序算法,及如何用Python实现. 排序算法可以分为内部排序 ...

  7. 用Python手写十大经典排序算法

    作者:hustcc 来源:https://github.com/hustcc/JS-Sorting-Algorithm 排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内 ...

  8. 简单排序算法时间空间复杂度分析及应用(4)-二分插入排序

    简单排序算法时间空间复杂度分析及应用(4)-二分插入排序 背景: 顾名思义,这个二分插入排序是直接插入排序的进化版,主要变化的地方就是在内循环部分,即外循环的循环节点在确定区域的位置查询方式由原来的直 ...

  9. python数组排序返回索引_python列表排序返回索引

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我需要对列表进行排序,然后返回一个列表,其中包含列表中排序项的索引... 我有一 ...

最新文章

  1. mysql innodb 设置详解_【mysql】mysql innodb 配置详解
  2. 洛谷 P4175: bzoj 1146: [CTSC2008]网络管理
  3. linux基础知识复习
  4. HBase数据模型:rowkey timestamp 列族 cell
  5. 视频播放器——开源免费三大代表
  6. WebBrowser的Cookie操作(与CookieContainer的关系)
  7. Android Runnable与Handler和Thread的使用,Handler构造方法弱引用实现
  8. 开发者在对项目失去信心后,该做什么?
  9. Yearn已完成对于6666枚YFI的增发
  10. 限量!“Java 成长笔记” Spring Boot/Sentinel/Nacos 高并发
  11. python ModuleNotFoundError: No module named ‘requests‘ 的 解决方案
  12. JAVA之列表集合ArrayList
  13. 艾肯声卡安装调试方法【必看】
  14. echarts 不刷新页面更新数据
  15. usb-cam(1)安装
  16. 鲜有人知道的项目,各种邀请码偷偷做几个W
  17. 那些酷炫的深度学习网络图怎么画出来的?
  18. ASP.NET2.0关于BIN目录下DLL文件访问的问题
  19. 憨批的语义分割重制版11——Keras 搭建自己的HRNetV2语义分割平台
  20. UOS系统龙芯架构deb安装包打包实践

热门文章

  1. 虚幻4 控制台_虚幻引擎打造足球手游!实况足球新引擎测试今日开启
  2. Ubuntu 13.04 软件安装
  3. android jni java调用c_Android与JNI(一) ---- Java调用C 静态调用
  4. linux sed举例,sed 常用命令与参数,带举例:时时更新!
  5. linux u盘分区 mdev 卸载问题,嵌入式linux 实现mdev SD卡和U盘自动挂载和卸载的方法 mdev.conf...
  6. hashset java 键值对_Java中的各个容器的性能对比
  7. matlab中的lower,请问:MATLAB中,有实现Gabor变换的函数吗?
  8. Dreamoon Likes Sequences CodeForces - 1330D(组合数学+位运算)
  9. PolandBall and Forest(并查集)
  10. matlab中方差直方图,如何规范直方图在MATLAB?