排序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. Mysql导入大文件报错(MySQL server has gone away(error 2006))

    前言 我们在导入mysql数据时候,mysql客户端突然报错:MySQL server has gone away(error 2006) 类似这种情况,处理思路为:调节mysql允许导入包的大小即可 ...

  2. 手机termux上安装msfconsole

    大家可能因为手机没有root而不能通过deploy安装kali 我们使用termux来安装渗透工具 1.下载并安装Termux,更新软件源并升级软件包 apt update apt upgrade a ...

  3. C++STL中set的使用策略(详解)

    set的英文意思是“集合”, 集合都不陌生吧,集合的特点有唯一性,即:每一个元素只有一个,所以set可以用来“去重”操作,set还有默认的排序. 1.头文件——<set> 2.定义——se ...

  4. 2017 Multi-University Training Contest - Team 1 1011&&HDU 6043 KazaQ's Socks【规律题,数学,水】

    KazaQ's Socks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  5. http://acm.hdu.edu.cn/showproblem.php?pid=1039(水~)

    判读条件 1:有元音字母 2:不能三个连续元音或辅音 3.不能连续两个相同的字母,除非ee或oo #include<cstdio> #include<cstring> #inc ...

  6. HDU--2024

    C语言合法标识符 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  7. HDU--2021

    发工资咯:) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  8. [国嵌攻略][151][nandflash驱动程序设计]

    初始化 打开/drivers/mtd/nand/s3c2410.c找到nand flash驱动程序代码,找到模块初始化函数s3c_nand_init,找到platform_driver中的probe函 ...

  9. .25-浅析webpack源码之事件流compilation(3)

    这一节跑下一批plugin. compiler.apply( new EnsureChunkConditionsPlugin(), new RemoveParentModulesPlugin(), n ...

  10. api接口token验证

    接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效: 2.因为是非开放性的,所以OAuth那套协议是行不通的,因为没有中间用户的授权过程: 3.有点接口需要用户登录 ...