算法之LOWB三人组之冒泡排序】的更多相关文章

排序 冒泡排序(Bubble Sort)时间复杂度为O(n^2) 列表每两个相邻的数,如果前面比后面大,则交换这两个数 一趟排序完成后,则无序区减少一个数,有序区增加一个数. def bubble_sort(li): for i in range(len(li)-1): # i代表的是第几趟,由于最后一趟不需要再走了,所以N-1为需要走多少趟 for j in range(len(li)-i-1): # j代表的是指针,指向第几个元素,走了几趟,本来剩N-i趟,但是最后一个数字不需要再去比较,所…
参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性: 经过某种排序后,如果两个记录序号同等,且两者在原无序记录中的先后秩序依然保持不变,则称所使用的排序方法是稳定的,反之是不稳定…
选择排序 思想是在一个列表中每次循环一遍,拿到最小值,接着再从剩下的无序区中继续拿最小值,如此循环,直到结束. 时间复杂度为O(n^2) # 最简单的一个选择排序,循环一个列表,拿到最小值,添加到一个新列表,之后在列表中删除这个最小值,继续再剩下的值中找最小值,往复循环. def select_sort_simple(li): new_li = [] for i in range(len(li)): min_val = min(li) new_li.append(min_val) li.remo…
冒泡排序思路: 选择排序思路: 插入排序思路: 小结: 详细代码解释看下一篇…
插入排序 思想:类似于抽扑克牌,共有8张扑克牌,手里默认有一张,桌面上有7张,我们每次从桌面上抽一张和手里的牌进行比较,如果比手里的牌大,则直接放到手里的牌的后面,如果比手里的牌小,则放到手里的牌的前面,保证你放的每一次都会产生一个有序区.当牌完的时候,这8张牌也就排好了顺序.这就是插入排序 时间复杂度为O(n^2) def insert_sort(li): for i in range(1, len(li)): tmp = li[i] # 摸到的牌存一个变量中 j = i - 1 # 模到的牌…
1.什么是算法 2.递归 # 一直递归,递归完成再打印 def func4(x): if x > 0: func4(x - 1) print(x) func4(5) 3.时间 复杂度 (1)引入 时间复杂度:用来评估算法运行效率的一个东西                    (2)小结 时间复杂度是用来估计算法运行时间的一个式子(单位). 一般来说,时间复杂度高的算法比复杂度低的算法快 (3)判断标准       (4)空间复杂度 4.列表查找:二分查找 (1)线性查找(顺序查找) (2)二分…
快速排序: 堆排序: 二叉树: 两种特殊二叉树: 二叉树的存储方式: 小结: 堆排序正题: 向下调整: 堆排序过程: 堆排序-内置模块: 扩展问题topk: 归并排序: 怎么使用: NB三人组小结…
冒泡排序 时间复杂度:O(n2)  算法稳定 第一趟,从第一个数开始,相邻两个数比较,大的数交换放后,交换到最后位置得出一个第一大数 第二趟,从第一个数开始,相邻两个数比较,大的数交换放后,交换到倒数第二得出一个第二大数 第n-1趟,最后的两个数比较得出最小数和倒数第二小数 代码实现点:时时比较,时时交换 def bubble_sort(li): for i in range(len(li)-1): #第i趟 exchange = False for j in range(len(li)-i-1…
冒泡排序:顾名思义就是像气泡从水里浮出来一样 把列表立起来如上图所示,从列表的第0项开始循环(把最大的数想成此次循环的气泡) 要把最大的放到上面那那就用第0项开始一次和剩下的开始比较,只要比第0项小就把他们两个的位置互换一次类推,循环一圈下来7就到了他应该处在的位置上. def bubble_sort(li): for i in range(len(li)-1): # i表示第n趟 一共n或者n-1趟 exchange = False for j in range(len(li)-i-1): #…
def insert_sort(li): for i in range(1, len(li)): # i表示摸到的牌的下标 tmp = li[i] # 摸到的牌 j = i - 1 while j >= 0 and li[j] > tmp: # 只要往后挪就循环 2个条件都得满足 # 如果 j=-1 停止挪 如果li[j]小了 停止挪 li[j+1] = li[j] j -= 1 # j位置在循环结束的时候要么是-1要么是一个比tmp小的值 li[j+1] = tmp 和冒泡相似,循环的时候遇…
def get_min_pos(li): min_pos = 0 for i in range(1, len(li)): if li[i] < li[min_pos]: min_pos = i return min_pos def select_sort(li): for i in range(len(li)-1): # n或者n-1趟 # 第i趟无序区范围 i~最后 min_pos = i # min_pos更新为无序区最小值位置 for j in range(i+1, len(li)): i…
快速排序 思路: 例如:一个列表[5,7,4,6,3,1,2,9,8], 1.首先取第一个元素5,以某种方式使元素5归位,此时列表被分为两个部分,左边的部分都比5小,右边的部分都比5大,这时列表变成了[2,1,4,3,5,6,7,9,8] 2.再对5左边进行递归排序,取5左边部分的第一个元素2,使2归位,这时5左边的部分变成了[1,2,4,3] 3.2归位后再对2右边5左边的部分即[4,3]进行排序,然后整个列表中5左边的部分就完成了排序 4.再使用递归方法对5右边的部分进行递归排序,直到把列表…
冒泡排序:列表在内存重只存一份,所以不需要重复赋值 import random from timewrap import * #时间装饰器 # 初级版本 @cal_time def bubble_sort(li): for i in range(len(li)-1): #循环的躺数为总的躺数-1,因为最后一步没必要走 # i 表示趟数 # 第 i 趟时: 无序区:(0,len(li) - i) for j in range(len(li) - i - 1): #循环i次之后就还有总长度-1-i次…
排序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]=l…
排序NB三人组 快速排序,堆排序,归并排序 1.快速排序 方法其实很简单:分别从初始序列“6  1  2 7  9  3  4  5 10  8”两端开始“探测”.先从右往左找一个小于6的数,再从左往右找一个大于6的数,然后交换他们. 这里可以用两个变量i和j,分别指向序列最左边和最右边.我们为这两个变量起个好听的名字“哨兵i”和“哨兵j”.刚开始的时候让哨兵i指向序列的最左边(即i=1) 指向数字6.让哨兵j指向序列的最右边(即j=10),指向数字8. 首先哨兵j开始出动.因为此处设置的基准数…
本节内容: 算法基本知识 冒泡排序 选择排序 插入排序 1. 算法基本知识 1.1 什么是算法? 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出.简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果. 一个算法的优劣可以用空间复杂度与时间复杂度来衡量. 一个算法应该具有以下七个重要的特征: ①有穷性(Finiteness):算法的有穷性是指算法必须能在执行有限个步骤之后终止: ②确切性(Definiteness):算法的每一步…
多维算法思考(三):AB组合问题 题目:x个A,y个B可以组合成多少个不同排列的问题. 首先,我们用数学的方式思考,这个问题属于<组合数学>的问题,我们的第一种方法可以用组合思路来求解. 也就是说在x+y个单元格中随机选出x个单元格用来存放A,那么其他的也就自然存放B,所以共有种不同的排列,例如当x=3,y=2时,可组成10种不同的排列. 这种方法虽好,但不直观.如果我们要列出所有的AB组合,这种方法显然不容易办到,这时我们可以用另一种方法来求解.利用递归的思想.我们用f(x,y)表示x个A,…
1.1 kill.killall.pkill杀手三人组 1.利用kill 进程号 方式杀掉rsync进程 [root@backup ~]# ps -ef |grep rsync root 3500 1 0 10:49 ? 00:00:00 rsync --daemon root 3773 3757 0 13:43 pts/0 00:00:00 grep --color=auto rsync [root@backup ~]# kill 3500 [root@backup ~]# kill 3500…
NB三人组之 快速排序 def partition(li, left, right): tmp = li[left] while left < right: while left < right and li[right] >= tmp: right -= 1 li[left] = li[right] while left < right and li[left] <= tmp: left += 1 li[right] = li[left] li[left] = tmp #…
有序区:有的地方的数据已经完全变得有顺序,我们把这部分区域的数据成为有序区无序区:有的地方的数据依旧无序,我们把这部分数据成为无序区时间复杂度:用来估计算法运行时间的一个式子(单位)空间复杂度:用来评估算法内存占用大小的一个式子 一般来说,时间复杂度高的算法比复杂度低的算法慢. 常见的时间复杂度(按效率排序) O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3) 不常见的时间复杂度(看看就好) O(n!) O(2n) O(nn…
一.冒泡排序 a.冒泡排序----优化 如果冒泡排序中执行一趟而没有交换,则列表已经是有序状态,可以直接结算法 import random from timewrap import * @cal_time def bubble_sort(li): for i in range(len(li) - 1): # i 表示趟数 # 第 i 趟时: 无序区:(0,len(li) - i) for j in range(0, len(li) - i - 1): if li[j] > li[j+1]: li…
排序 1.冒泡排序 冒泡算法 import random # 随机模块 def bubble_sort(li): ###################################冒泡排序##################################### for i in range(len(li)-1): # 多少趟 for j in range(len(li)-i-1): #一趟里多少次 if li[j]>li[j+1]: # 升序排列 " < " 为降序排…
选择排序思路: 算法程序: def cal_time(func): # 装饰器 ,用来检测算法所执行的时间 def wrapper(*args,**kwargs): t1=time.time() result=func(*args,**kwargs) t2=time.time() print("%s running time: %s secs." %(func.__name__,t2-t1)) return result return wrapper @cal_time def sel…
归并排序只能对两个已经有序的列表进行合并排序,所以要我们自己创建出两个有序列表.最后在进行合并. def merge2list(li1, li2): li = [] i = 0 j = 0 while i < len(li1) and j < len(li2): if li1[i] <= li2[j]: li.append(li1[i]) i += 1 else: li.append(li2[j]) j += 1 while i < len(li1): li.append(li1[…
核心思想: 将列表中第一个元素拿出来,放到一边,左右两个循环,左面的大于拿出来的数,就把他挪到右面, 右面的小于拿出来的数就把他放在左面,这是列表被第一个元素''分''为两个列表,在对两个列表进行同样的操作进行递归. def partition(li, left, right): tmp = li[left] while left < right: while left < right and li[right] >= tmp: right -= 1 li[left] = li[righ…
#快速排序-除了python自带的sort排序模块之外就这个最好用,只需会这个就行,其他的排序了解就好,能用冒泡,插入..的都可以用快排快速实现 import random from timewrap import * import copy import sys sys.setrecursionlimit(100000) #更改最大递归深度 def partition(li, left, right): #无序列表,最小值,最大值 ,归位 # ri = random.randint(left,…
二.冒泡排序 基本思想:它的思路很有特点循环,两两向后比较.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 算法实现: #coding: utf-8 #!/usr/bin/python import random #随机生成0~100之间的数值 def get_andomNumber(num): lists=[] i=0 while i<num: lists.append(random.…
参考博客:基于python的七种经典排序算法     常用排序算法总结(一) 序前传 - 树与二叉树 树是一种很常见的非线性的数据结构,称为树形结构,简称树.所谓数据结构就是一组数据的集合连同它们的储存关系和对它们的操作方法.树形结构就像自然界的一颗树的构造一样,有一个根和若干个树枝和树叶.根或主干是第一层的,从主干长出的分枝是第二层的,一层一层直到最后,末端的没有分支的结点叫做叶子,所以树形结构是一个层次结构.在<数据结构>中,则用人类的血统关系来命名,一个结点的分枝叫做该结点的"…
前面两篇博客介绍了线性表的顺序存储与链式存储以及对应的操作,并且还聊了栈与队列的相关内容.本篇博客我们就继续聊数据结构的相关东西,并且所涉及的相关Demo依然使用面向对象语言Swift来表示.本篇博客我们就来介绍树结构的一种:二叉树.在之前的博客中我们简单的聊了一点树的东西,树结构的特点是除头节点以外的节点只有一个前驱,但是可以有一个或者多个后继.而二叉树的特点是除头结点外的其他节点只有一个前驱,节点的后继不能超过2个. 本篇博客,我们只对二叉树进行讨论.在本篇博客中,我们对二叉树进行创建,然后…
http://www.algolist.net/Algorithms/ https://docs.oracle.com/javase/tutorial/collections/algorithms/ https://en.wikipedia.org/wiki/Sorting_algorithm 冒泡排序(Bubble sort) https://en.wikipedia.org/wiki/Bubble_sort loop1: 4,6,1,3,7 -> 4,6,1,3,7 4,6,1,3,7 ->…