第 1 章 一大波数正在靠近——排序

网友投稿 294 2022-11-05


第 1 章 一大波数正在靠近——排序

第 1 节 最快最简单的排序——桶排序

# 第 1 节 最快最简单的排序——桶排序import numpy as np# 时间复杂度 O(M+N)# M:桶的个数# N:待排序数的个数def sort(a): b = np.zeros(11, dtype=int) # 进行计数 for v in a: temp = b[v] b[v] = temp + 1 print(b) print('排序结果:', end="\t") # 出现了几次就打印几次 for (i, v) in enumerate(b): for j in range(1, v + 1): print(i, end="\t")if __name__ == '__main__': array = [5, 2, 5, 3, 8] sort(array)

第 2 节 邻居好说话——冒泡排序

冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。

# 第 2 节 邻居好说话——冒泡排序def bubble_sort(a): print(a) n = len(a) for i in range(n): # 比较n-1趟 for j in range(n - i - 1): # 从第一个数开始和后面的数比较,比较次数:n-i-1 if a[j] < a[j + 1]: t = a[j + 1] a[j + 1] = a[j] a[j] = tif __name__ == '__main__': a = [23, 456, 78, 8, 9, 23, 561, 323, 11, 8] bubble_sort(a) print("结果:") print(a)

第 3 节 最常用的排序——快速排序

# 第 3 节 最常用的排序——快速排序# 时间复杂度:最差O( N2),平均时间复杂度为 O( Nlog N)def quick_sort(left, right, array): i = left j = right if left > right: return # 基数取左边第一个 temp = array[left] while i != j: # 顺序很重要,要先从右往左找。为什么? # 先从在边开始时,那么 i 所停留的那个位置肯定是大于基数6的 while (a[j] >= temp) and (i < j): j = j - 1 # 再从左往右找 while (a[i] <= temp) and (i < j): i = i + 1 # 当哨兵i和哨兵j没有相遇时 交换位置 if i < j: t = array[j] array[j] = array[i] array[i] = t # print(i) # 将基数 temp放到i的位置,左边都是小于基数的,右边都是大于基数的 array[left] = array[i] array[i] = temp # 递归 quick_sort(left, i - 1, a) quick_sort(i + 1, right, a)if __name__ == '__main__': a = [6, 1, 2, 7, 9, 3, 4, 5, 10, 8] print("数组:", a) quick_sort(0, len(a) - 1, a) print("结果:", a)

第 4 节 小哼买书

桶排序是最快的,它的时间复杂度是O( N+ M);冒泡排序是 O( N2);快速排序是 O( Nlog N)。

小哼将按照排序好的 ISBN 号去书店买书。请你协助小哼完成“去重”与“排序”的工作。

# 第 4 节 小哼买书import numpy as np# 时间复杂度 O(M+N)# M:桶的个数# N:待排序数的个数def sort(a): b = np.zeros(1000, dtype=int) # 进行计数 for v in a: temp = b[v] b[v] = temp + 1 # print(b) print('排序结果:', end="\t") # 出现了几次都打印一次,以达到去重的目的 for (i, v) in enumerate(b): if v > 0: print(i, end="\t")if __name__ == '__main__': array = [20, 40, 32, 67, 40, 20, 89, 300, 400, 15] sort(array)


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:考生号查询入口API(考生号查询入口2021)
下一篇:SpringBoot 请求参数忽略大小写的实例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~