一大波数正在靠近——排序

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)

以上是关于一大波数正在靠近——排序的主要内容,如果未能解决你的问题,请参考以下文章

2.啊哈!算法 --- 一大波数正在靠近——栈队列链表

基数序数与标称数

步入javascript----一大波JS正在靠近

DBA+直聘前方高能!一大波高薪职位正在靠近, 你准备好了吗?

程序员证明自己智商的时候到了,一大波智力面试题正在靠近

《啊哈!算法》的笔记