排序
常见的排序
七月听雪
这个作者很懒,什么都没留下…
展开
-
python heapq模块最大堆
可以用给数据(基本数据类型)填符号的方法来解决,数据流里可以是正数和负数的组合,填符号是为了改变单调性。import heapqa = [2,3,4,-10,-1,-3,-90]h = []for i in a: heapq.heappush(h,-i)for i in a: print(-heapq.heappop(h))432-1-3-10...原创 2020-03-14 09:21:05 · 3313 阅读 · 0 评论 -
python heapq模块自定义比较函数
python中的堆排序模块heapq本身不支持自定义比较函数,可以通过重写对象的__lt__方法的方式来实现自定义比较函数。__lt__对应<,当对象之间用<比较大小的时候,就会调用__lt__方法。同样的>会调用__gt__方法,在只重写了__lt__方法的时候,__gt__会对__lt__结果取反。但是当比较相等的时候,二者的结果是相等的。import heapq...原创 2020-03-14 09:14:27 · 8251 阅读 · 0 评论 -
经典排序综述
https://www.cnblogs.com/onepixel/p/7674659.html#4490972原创 2020-03-13 08:52:22 · 101 阅读 · 0 评论 -
希尔排序
def shell_sort(alist): """希尔排序""" n = len(alist) gap = n // 2 while gap >= 1: # 注意:这里和动图演示的不一样,动图是分组执行,实际操作是多个分组交替执行 for j in range(gap, n): i =...原创 2020-03-12 21:15:20 · 125 阅读 · 0 评论 -
冒泡排序
def bubbleSort(arr): for i in range(len(arr)): for j in range(len(arr)-1-i): if arr[j]>arr[j+1]: arr[j],arr[j+1] = arr[j+1],arr[j]原创 2020-03-12 20:16:33 · 75 阅读 · 0 评论 -
选择排序
def selectSort(arr): for i in range(len(arr)): minIndex = i for j in range(i+1,len(arr)): if arr[j]<arr[minIndex]: minIndex = j arr[i]...原创 2020-03-12 20:03:55 · 91 阅读 · 0 评论 -
基数排序
def radix_sort(s): """基数排序""" i = 0 # 记录当前正在排拿一位,最低位为1 max_num = max(s) # 最大值 j = len(str(max_num)) # 记录最大值的位数 while i < j: bucket_list =[[] for _ in range(...原创 2020-03-12 18:45:21 · 82 阅读 · 0 评论 -
计数排序
def countingSort(arr): # the elements in the array are all integers maximum, minimum = max(arr), min(arr) countArr = [0] * (maximum - minimum + 1) # 建立额外的空间 for i in arr...原创 2020-03-12 14:20:43 · 96 阅读 · 0 评论 -
桶排序
def bucktetSort(numList,bucketNum): if len(numList) == 0 or len(numList) == 1: return numList maxNum = numList[0] minNum = numList[0] for i in range(1,len(numList)): # ...原创 2020-03-12 10:59:04 · 126 阅读 · 0 评论 -
插入排序
def insert(a): for i in range(1,len(arr)): j=i-1 tmp = arr[i] while j>=0 and arr[j]>tmp: arr[j+1]=arr[j] j-=1 arr[j+1]=tmp ...原创 2020-03-11 19:47:38 · 89 阅读 · 0 评论 -
堆和堆排序
堆的定义: 堆是 1. 一个近似完全二叉树的结构, 2. 并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序:堆排序的原理: 堆排序是利用数组实现的。大根堆和小根堆:堆排序的步骤:根据堆的性质(以最大堆举例):堆的根节点肯定是所有数据中最大的,但是他的所有子结点不是完全有序的...原创 2020-02-12 15:14:49 · 159 阅读 · 0 评论 -
归并排序
核心思想:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案”修补”在一起,即分而治之)。思路简图:实例示意图:1.整体过程示意图:2.合并(治)示意图:...原创 2019-08-26 22:29:39 · 119 阅读 · 0 评论 -
快速排序
快排是四处游走必会的。基本概念: 快排是对冒泡排序的优化,基于分治的思想。二者都是交换排序,通过交换元素的位置来排序的,与归并排序不同的是快排不用声明一个新的空间来保存中间结果。 冒泡排序在每一轮只把一个元素冒泡到数列的一端,而快速排序在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成了两个部分。原...原创 2019-08-28 16:18:35 · 106 阅读 · 0 评论 -
拓扑排序
拓扑排序的定义:拓扑排序是在有向无环图(DAG)里按指向关系弹出一个序列,比如A->B,在序列里A就要在B的前面。官方定义:由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。拓扑排序的性质:每个顶点出现且只出现一次。 若A在序列中排在B的前面,则在图中不存在从B到A的路径。 DAG图必然存在一个拓扑排序。 拓扑排序的序列不一定唯一。拓扑排序的实现:...原创 2019-08-23 11:27:30 · 255 阅读 · 0 评论