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

Posted yanjy-onlyone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法-(冒泡选择插入算法)相关的知识,希望对你有一定的参考价值。

运行效率较慢的三大排序算法:冒泡、选择与插入算法,时间复杂度都为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)

运行效果如下:

技术图片











 

以上是关于排序算法-(冒泡选择插入算法)的主要内容,如果未能解决你的问题,请参考以下文章

三大基础排序算法(冒泡排序,选择排序,插入排序)

四种排序算法实现

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

python 数据结构与算法之排序(冒泡,选择,插入)

JavaScript算法(冒泡排序选择排序与插入排序)

[leetcode]排序算法(冒泡排序,选择排序,插入排序,快速排序,计数排序)