一大波数正在靠近——排序
Posted wx5faa6aeda7728
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一大波数正在靠近——排序相关的知识,希望对你有一定的参考价值。
第 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] = t
if __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)
以上是关于一大波数正在靠近——排序的主要内容,如果未能解决你的问题,请参考以下文章