排序low B三人组

列表排序:将无序列表变成有充列表

应用场景:各种榜单,各种表格,给二分法排序使用,给其他算法使用

输入无序列表,输出有序列表(升序或降序)

排序low B三人组

1. 冒泡排序

首先,列表每两个相邻的数做比较,如果前边的数比后边的数大,那么交换这两个数

def bubble_sort(l1):
for i in range(len(l1)-1):
for j in range(len(l1)-i-1):
if l1[j] > l1[j+1]:
l1[j],l1[j+1]=l1[j+1],l1[j] return l1

冒泡排序的优化

如果冒泡排序中执行一趟而没有交换,则列表已经是有序状态,可以直接结束排序

def bubble_sort_1(l1):
for i in range(len(l1)-1):
flag=False for j in range(len(l1)-i-1):
if l1[j] > l1[j+1]:
l1[j],l1[j+1]=l1[j+1],l1[j]
flag=True if not flag:
return l1

2. 选择排序

一趟遍历记录中最小的数,放到第一个位置

再一趟遍历记录剩余列表中最小的数,继续放置

    def select_sort(l1):
for i in range(len(l1)-1):
mid=i for j in range(i+1,len(l1)):
if l1[j] <l1[mid]:
mid=j l1[mid],l1[i]=l1[i],l1[mid] return l1

3. 插入排序

列表被分有有序区和无序区两个部分.最初有序区只有一个元素

每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空

例如,最初时有一个无序列表l1=[5,7,4,6,3,1,2,9,8],其使用插入排序时的步骤为:

1.取无序列表l1中的第一个元素5,放入另一个有序列表tmp中
2.取无序列表l1中的第二个元素7,因为7比5大,把7放入有序列表tmp的第二个位置
3.取无序列表l1中的第三个元素4,因为4比5小,所以把4放入到有序列表tmp的元素5的左边中,此时有序列表tmp为[4,5,7]
4.取l1中第四个元素6,因为6比5大,又比7小,把6放入到元素5和7之间,此时tmp变成了[4,5,6,7]
...
每次从无序区中选择一个元素,插入到有序区的某个位置,直到无序区变空
def insert_sort(li):
for i in range(1, len(li)):
tmp = li[i]
j = i - 1 #手里最后一张
while j>=0 and li[j]>tmp:
li[j+1]=li[j]
j = j-1
li[j+1] = tmp return li

排序算法之low B三人组的更多相关文章

  1. 1、算法介绍,lowB三人组,快速排序

    1.什么是算法 2.递归 # 一直递归,递归完成再打印 def func4(x): if x > 0: func4(x - 1) print(x) func4(5) 3.时间 复杂度 (1)引入 ...

  2. 算法相关——Java排序算法之快速排序(三)

    0. 前言 本系列文章将介绍一些常用的排序算法.排序是一个非常常见的应用场景,也是开发岗位面试必问的一道面试题,有人说,如果一个企业招聘开发人员的题目中没有排序算法题,那说明这个企业不是一个" ...

  3. 算法之排序Low B三人组

    有序区:有的地方的数据已经完全变得有顺序,我们把这部分区域的数据成为有序区无序区:有的地方的数据依旧无序,我们把这部分数据成为无序区时间复杂度:用来估计算法运行时间的一个式子(单位)空间复杂度:用来评 ...

  4. LOW逼三人组(二)----选择排序算法

    选择排序思路: 算法程序: def cal_time(func): # 装饰器 ,用来检测算法所执行的时间 def wrapper(*args,**kwargs): t1=time.time() re ...

  5. LOW逼三人组(一)----冒泡算法

    排序 1.冒泡排序 冒泡算法 import random # 随机模块 def bubble_sort(li): ###################################冒泡排序#### ...

  6. low逼三人组、nb二人组、归并、希尔排序----小结

  7. LOW逼三人组(三)----插入排序

    插入排序思路 插入排序算法: import random # 随机模块 import time def cal_time(func): # 装饰器 ,用来检测算法所执行的时间 def wrapper( ...

  8. 02-Java 数组和排序算法

    一.Java 数组 1.数组定义:数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来做唯一标识. 2.数组的分类:一维.二维.三维. 3.数组声明及内存分配: 为数组分配内存空间:如果不分 ...

  9. 常用的-->查找算法与排序算法

    顺序查找 从列表第一个元素开始,顺序进行搜索,直到找到为止. 二分查找 从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半. li = [1, 2, ...

随机推荐

  1. 学习笔记 - 用js判断页面是否加载完成实现代码

    用document.onreadystatechange的方法来监听状态改变, 然后用document.readyState == "complete"判断是否加载完成 docum ...

  2. XYZZY(spfa求最长路)

    http://acm.hdu.edu.cn/showproblem.php?pid=1317 XYZZY Time Limit: 2000/1000 MS (Java/Others)    Memor ...

  3. 重新学习一次javascript;

    每次有项目的时候,总觉得自己什么都不会做,然后做的时候又很简单,一会就做完了,啪啪打脸: 每次别人问的时候,我知道怎么做,但是不知道具体原理,觉得瞬间low了: 想要好好的吧基础掌握一下: 这几天空闲 ...

  4. 010 有顺序的Map的实现类:TreeMap和LinkedHashMap

    作者:nnngu GitHub:https://github.com/nnngu 博客园:http://www.cnblogs.com/nnngu 简书:https://www.jianshu.com ...

  5. word文档自动生成方法

    创建word文档需要几个接口类,常用application,document,documents,selection等.但word的功能复杂,要认识到每一个类的功能是不可能的.常用的方法是在word的 ...

  6. reduceByKeyLocally

    2017年3月15日, 星期三 reduceByKeyLocally--Transformation类算子 代码示例  

  7. LAMP LNMP 和 LNMPA

    LAMP指的是:Linux+Apache+MySQL+Perl/PHP/Python LAMP是一个缩写,它指一组通常一起使用来运行动态网站或者服务器的自由软件: Linux,操作系统:  Apach ...

  8. JVM核心之JVM运行和类加载全过程

    为什么研究类加载全过程? 有助于连接JVM运行过程 更深入了解java动态性(解热部署,动态加载),提高程序的灵活性 类加载机制 JVM把class文件加载到内存,并对数据进行校验.解析和初始化,最终 ...

  9. RocketMQ-顺序消费

    看了https://www.jianshu.com/p/453c6e7ff81c这篇博客,得出顺序消费的结论."要实现严格的顺序消息,简单且可行的办法就是:保证生产者 - MQServer ...

  10. python_如何对实例属性进行类型检查?

    案例: 在某项目中,我们实现了一些类,并希望能像静态语言那样对他们的实例属性进行类型检查 p = Person() p.name = 'xi_xi'         # 必须是str p.age = ...