排序算法-(冒泡、选择、插入算法)
运行效率较慢的三大排序算法:冒泡、选择与插入算法,时间复杂度都为O(n2),运行效率较慢。
#python 代码实现如下所示:
li=[2,1,4,5,7,8,9,5,3]#冒泡算法(升序算法)O(n2)import randomfrom cal_time import *@cal_timedef 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_newprint("选择排序算法的排序结果为:{}".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)运行效果如下: