冒泡排序
逐个相邻比较,若当前数比前一个数小,就互换位置,每一趟完成之后最大数到最后。
#coding=UTF-8
import numpy as np
#生成10个0~99的随机数
a=np.random.randint(0,100,10)
print(a)
#假设n个数,总共需要进行n-1趟排序
for i in range(1,len(a)): # [1,...,n-1]
#第i趟索引从1到n-i+1
for j in range(1,len(a)-i+1): # [1,...,n-i+1]
# 当前数比前一个小,与前一个互换位置
if a[j]<a[j-1]:
tmp=a[j]
a[j]=a[j-1]
a[j-1]=tmp
print(i,'=',a) #每排序一趟显示一次
选择排序
第1趟从索引 0~end 开始找出最小数,与第1位互换位置;
第2趟从索引 1~end 开始找出第2小的数,与第2位互换位置;
。。。。类推
#coding=UTF-8
import numpy as np
a=np.random.randint(0,30,8)
print(a)
#共进行n-1趟排序
for i in range(0,len(a)-1):
min=a[i]
min_index=i
for j in range(i,len(a)): #找出最小值,及其索引
if a[j]<min:
min=a[j]
min_index=j
tmp=a[min_index]
a[min_index]=a[i]
a[i]=tmp
print(i,'=',a)
快速排序
参考链接:https://blog.csdn.net/nrsc272420199/article/details/82587933
#coding=UTF-8
import numpy as np
def quick_sort1(array):
if len(array)<=1:
return
i = 0
j = len(array)-1
temp = array[0]
while i<j:
#这2个等于号必须有,否则遇到一些数组会无限循环
#如:[23,45,17,11,13,89,72,26,3,17,11,13]
while i<j and array[j]>=temp:
j-=1
array[i]=array[j]
print(a)
while i<j and array[i]<=temp:
i+=1
array[j]=array[i]
print(a)
array[i]=temp
quick_sort1(array[0:i])
quick_sort1(array[i+1:])
global a
a=np.random.randint(0,30,8)
print(a)
print('\n')
quick_sort1(a)