国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

淺談插入排序算法在Python程序中的實(shí)現(xiàn)及簡(jiǎn)單改進(jìn)

2020-01-04 17:29:44
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了插入排序算法在Python程序中的實(shí)現(xiàn)及簡(jiǎn)單改進(jìn),插入排序算法的最差時(shí)間復(fù)雜度為O(n^2),最優(yōu)時(shí)間復(fù)雜度為O(n),存在一定的優(yōu)化空間,需要的朋友可以參考下
 

Python實(shí)現(xiàn)插入排序的一般范例為:

#coding=cp936#coding=cp936#插入排序算法def InsertionSort(A):  for j in range(1,len(A)):    key = A[j]    i = j-1    #向前查找插入位置    while i>=0 and A[i]>key:      A[i+1] = A[i]      i = i-1    A[i+1] = key #初始化輸入數(shù)據(jù)A = []input = raw_input('please input some numbers:') #輸入逗號(hào)分隔整數(shù)列 如:7,6,5,1,8,34for item in input.split(','):  A.append(int(item)) InsertionSort(A)#插入排序print A

插入算法的原理是:當(dāng)前元素和已經(jīng)排序好的部分比較,滿足條件時(shí)插入,插入點(diǎn)之后的元素全部往后移。
然而,我也正是受這個(gè)描述的誤導(dǎo),在實(shí)現(xiàn)的時(shí)候走了一些彎路。比如有以下列表:

test = [2, 5, 11, 21, 10, 18, 24]

比如當(dāng)前元素是10,我在開(kāi)最初的實(shí)現(xiàn)思路是從列表的第一個(gè)元素開(kāi)始,一直比較到元素11才找到合適位置.這樣做最終是可以實(shí)現(xiàn)排序的,但是有一個(gè)問(wèn)題,就是當(dāng)我把10插入11的位置之后,11和21都需要往后移,這又需要另一個(gè)循環(huán),實(shí)現(xiàn)如下:

def insertSort(sort_list):  list_length = len(sort_list)  if list_length < 2 :    return sort_list  for i in range(1,list_length):    key = sort_list[i]    j = 0    while j < i:      if sort_list[j] > key:        for k in range(i,j,-1):          sort_list[k] = sort_list[k-1]        sort_list[j] = key        break      j += 1  return sort_list

   首先,引入了三個(gè)循環(huán)變量以及三層循環(huán),效率較低;其次是代碼結(jié)構(gòu)會(huì)比較混亂,需要改進(jìn)。

后來(lái)我想能不能比較完一個(gè)元素就把它移到合適的位置,好如去超市買水果,手里拿到不合適的,總會(huì)直接把它放到一邊,不會(huì)再碰它。具體到算法實(shí)現(xiàn),還用上面的列表舉例,當(dāng)前元素是10,先跟相鄰的21比較,發(fā)現(xiàn)21比10大,則21往后移動(dòng)一位,即移到10所在位置;然后10和11比較,又會(huì)把11往后移動(dòng)一位;在比較到元素5時(shí),發(fā)現(xiàn)已經(jīng)找到了10應(yīng)該存放的位置,而此時(shí)移動(dòng)也隨之完成。
代碼實(shí)現(xiàn)如下:

def insertSort(sort_list):  list_length = len(sort_list)  if list_length < 2 :    return sort_list  for i in range(1,list_length):    key = sort_list[i]    j = i - 1    while j >=0 and sort_list[j] > key:      sort_list[j+1] = sort_list[j]      j -= 1    sort_list[j+1] = key  return sort_list

   孰優(yōu)孰劣,大家對(duì)比便知。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 龙南县| 迁西县| 阿克苏市| 凌海市| 枣强县| 达日县| 平顶山市| 疏勒县| 石嘴山市| 邹城市| 大竹县| 南华县| 华池县| 盐津县| 南开区| 金沙县| 安远县| 鄂州市| 武义县| 红河县| 阿坝| 宜都市| 漾濞| 同江市| 孙吴县| 濉溪县| 嘉荫县| 木兰县| 诸暨市| 沛县| 东方市| 晋州市| 东乌| 长汀县| 灵台县| 微山县| 亳州市| 仪征市| 黑水县| 庆阳市| 邓州市|