希尔 根据步长而不同,最优时间复杂度:O(n),平均时间复杂度:根据步长而不同
希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。
def shell_sort(list):
n=len(list)
gap=round(n/2)
while gap > 0:
for i in range(gap,n):
j=i
while j >= gap and list[j-gap]>list[i]:
list[j],list[j-gap]=list[j-gap],list[j]
gap=round(gap/2)
return list
冒泡 时间复杂度:O(n^2),最优时间复杂度:O(n),平均时间复杂度:O(n^2)
def bubble_sort(list):
length = len(list)
for index in range(length):
for j in range(1, length - index):
if list[j - 1] > list[j]:
list[j - 1], list[j] = list[j], list[j - 1]
return list
list=input().split()
list=[int(x) for x in list]
print(bubble_sort(list))
快速排序 O(n^2),最优时间复杂度:O(nlogn),平均时间复杂度:O(nlogn)
import random
def fastsort(list,star,end):
if star<end:
i,j=star,end
hh=list[i]
while i<j:
while (i<j) and (list[j]>=hh):
j-=1
list[i]=list[j]
while (i<j) and (list[i]<=hh):
i+=1
list[j]=list[i]
list[i]=hh
fastsort(list,star,i-1)
fastsort(list,j+1,end)
return list
list=[random.randint(0,999) for _ in range(10)]
fastsort(list,0,len(list)-1)
print(list)
选择排序 时间复杂度:O(n^2),最优时间复杂度:O(n^2),平均时间复杂度:O(n^2)
import random
def select_sort(list):
for i in range(len(list)):
min=i
for j in range(i+1,len(list)):
if list[j]<list[min]:
min=j
list[i],list[min]=list[min],list[i]
return list
list=[random.randint(0,999) for _ in range(10)]
print(list)
print(select_sort(list))