排序算法-(冒泡、选择、插入算法)

运行效率较慢的三大排序算法:冒泡、选择与插入算法,时间复杂度都为O(n2),运行效率较慢。

#python 代码实现如下所示:

li=[2,1,4,5,7,8,9,5,3]
#冒泡算法(升序算法)O(n2)
import random
from cal_time import *
@cal_time
def bubble_sort(li):
for i in range(len(li)-1): #第i趟
exchange=False
for j in range(len(li)-i-1): #无序区域为n-i-1
if li[j]>li[j+1]:
li[j],li[j+1]=li[j+1],li[j]
exchange=True
#print(li)
if not exchange:
return li
#li=[random.randint(0,10000) for i in range(1000)]
print(li)
print("冒泡排序算法的排序结果为:{}".format(bubble_sort(li)))

#选择排序(每次遍历找最小值,然后放各自的位置上去)
#1-1不足选择排序算法:占用内存,复杂度高O(n2)
def select_sort_simple(li):
li_new=[] #一个重新的新列表,多出来一个内存占用,不推荐使用
for i in range(len(li)):
min_val=min(li) #复杂度为O(n)
li_new.append(min_val)
li.remove(min_val) #复杂度为O(n)
return li_new
print("选择排序算法的排序结果为:{}".format(select_sort_simple(li)))

#选择算法时间复杂度为O(n2)
def select_sort(li):
for i in range(len(li)-1): #i是第i趟,总共需要n-1趟
min_loc=i
for j in range(i+1,len(li)):
if li[j]<li[min_loc]:
min_loc=j
li[i],li[min_loc]=li[min_loc],li[i]
print(li)
li=[2,1,4,5,7,8,9,5,3]
print(li)
select_sort(li)

#插入排序算法O(n2)
def insert_sort(li):
for i in range(1,len(li)): #i表示摸到的次序和牌
tmp=li[i]
j=i-1 #指的是手里的牌
while j>=0 and li[j]>tmp:
li[j+1]=li[j]
j=j-1
li[j+1]=tmp
print(li)

li=[2,1,4,5,7,8,9,5,3]
print(li)
insert_sort(li)

运行效果如下:











猜你喜欢

转载自www.cnblogs.com/Yanjy-OnlyOne/p/12401563.html