import numpy as np
# def Sort()代码越短越好
# 普通的排序
n1 = np.array([2, 4, 5, 7, 1])
def sort(nd):
for i in range(nd.size):
for j in range(i, nd.size):
if nd[i] > nd[j]:
nd[i], nd[j] = nd[j], nd[i]
return nd
sort(n1)
print(n1)
# 降低运算的空间复杂度和时间复杂度
n2 = np.array([8, 4, 5, 2, 9])
def sortnd(nd):
for i in range(nd.size):
# 切片:索引不对应
min_index = np.argmin(nd[i:]) + i
nd[i], nd[min_index] = nd[min_index], nd[i]
return nd
sortnd(n2)
print(n2)
# 1.快速排序
# np.sort()与ndarray.sort()都可以,但有区别:
# np.sort()不改变输入
# ndarray.sort()本地处理,不占用空间,但改变输入
# 使用ndarray.sort(),原来的数据进行了改变,不占内存
n3 = np.random.randint(0, 150, size=10)
print(n3)
n3.sort()
print(n3)
n4 = np.array([[6, 3, 7], [2, 8, 1]])
np.sort(n4, kind='quicksort')
print(n4)
# 2.部分排序
# 有的时候我们不是对全部的数据感兴趣,我们可能只对最小或最大的一部分感兴趣
# 当k为正时,我们想要得到最小的k个数
# 当k为负时,我们想要得到最大的k个数
nd = np.random.randint(0, 150, size=10)
n5 = np.partition(nd, -5) # 在后面得到最大的五个,但是不进行排序
print(nd)
print(n5)
print("\n")
n6 = np.partition(nd, 5) # 在前面得到最小的五个数,但是不进行排序
print(nd)
print(n6)
n7 = np.partition(nd, 5)[:5] # 进行切片,单独取出这五个数
np.sort(n7) # 排序
print(n7)