插入排序:当前左边但凡有数据并且该数据比当前大,则交换
arr=[2,4,8,6,5,1,9,7,3]
for i in range(1,len(arr)):
for j in range(i,0,-1):
if arr[i]<arr[i-1]:
arr[i],arr[i-1]=arr[i-1],arr[i]
j-=1
if arr[j]<arr[j-1]:
arr[j],arr[j-1]=arr[j-1],arr[j]
print(arr)
arr=[2,4,8,6,5,1,9,7,3]
for i in range(1,len(arr)):
e=arr[i]
for j in range(i,-1,-1):
if arr[j-1]>e and j-1>=0:
arr[j]=arr[j-1]
else:
arr[j]=e
break
print(arr)
计数排序:
不是通过数字之间的大小进行排序,而是数字本身的特性排序
1.找出最大值和最小值
2.根据max-min+1创建一个新的列表
3.计算偏移量
4.遍历原列表,在新列表中计数
5.遍历新列表,读取数字(index+offset)和次数
arr=[4,3,2,1,5,7,6,9,8]
min_num=arr[0]
max_num=arr[0]
for num in arr:
if num>max_num:
max_num=num
if num<max_num:
min_num=num
length=max_num-min_num+1
offset=min_num
lst=[0]*length
for num in arr:
lst[num-offset]+=1
"""
i+offseet #数字
lst[i] #该数字出现的次数
"""
for i in range(0,len(lst)):
for j in range(0,lst(i)):
print(i+offset,end=" ")
import random
arr=[0]*1000000
for i in range(0,len(arr)):
arr[i]=random.randint(0,10000)
# min_num=min(arr)
# max_num=max(arr)
arr2=arr.copy()
min_num=arr[0]
max_num=arr[0]
for num in arr:
if num>max_num:
max_num=num
if num<min_num:
min_num=num
length=max_num-min_num+1
offset=min_num
lst=[0]*length
for num in arr:
lst[num-offset]+=1
"""
i+offseet #数字
lst[i] #该数字出现的次数
"""
index=0
for i in range(0,len(lst)):
for j in range(0,lst[i]):
#print(i+offset,end=" ")
arr[index]=i+offset
index+=1
print("arr排序完毕")
arr2.sort()
print("arr2排序完毕")
冒泡排序:核心思想:
元素之间两两比较,大的向后走
arr=[1,5,8,3,2,9,6,7,4]
for i in range(0,len(arr)-1):
for j in range(0,len(arr)-1-i):
if arr[j]>arr[j+1]:
arr[j],arr[j+1]=arr[j+1],arr[j]
print(arr)
选择排序:默认从小到大排序,当前元素与之后所有元素都要进行比较,如果前者大于后者,则交换
import random
arr=[None]*2000
for i in range(0,len(arr)):
arr[i]=random.randint(0,10000)
arr2=arr.copy()
arr2.sort()
print("arr2排序完毕!")
for i in range(0,len(arr)-1):
for j in range(i+1,len(arr)):
if arr[i]>arr[j]:
arr[i],arr[j]=arr[j],arr[i]
print("arr排序完毕!")