最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)插入排序和選擇排序的方法

 更新時(shí)間:2019年05月12日 14:54:16   作者:zhuanglog  
這篇文章主要介紹了Python實(shí)現(xiàn)插入排序和選擇排序的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

話不多說,讓我們從最基本的排序算法開始吧

插入排序

如下圖所示,插入排序的實(shí)現(xiàn)思路顧名思義,就是 不斷地在一個(gè)已經(jīng)是有序的數(shù)組中,尋找合適位置并插入新元素 。

具體實(shí)現(xiàn)步驟為:

首先我們把整個(gè)數(shù)組拆分為有序區(qū)間和未排序區(qū)間,有序區(qū)間在插入排序一開始只有一個(gè)元素,就是數(shù)組的第一個(gè)元素。

接在有序區(qū)間之后的一個(gè)元素就是準(zhǔn)備插入的元素,在圖中就是標(biāo)為綠色的元素,在有序區(qū)間內(nèi)尋找位置并插入。

其尋找邏輯為:從后往前依次進(jìn)行比較,如果待插入元素大于當(dāng)前元素,則將待插入元素插入到當(dāng)前元素的后一位,如果待插入元素小于當(dāng)前元素,則將當(dāng)前元素后移一位。不斷重復(fù)該過程直至到數(shù)組的最后一位

其實(shí)現(xiàn)的具體代碼為:

def insertion_sort(a):
 length = len(a)
 if length <=1:
  return 
 for i in range(1,length):
  j = i-1
  value = a[i]
  while j >=0:
   if a[j]<value:
    a[j+1] = value
    break
   else:
    a[j+1] = a[j]
    if j == 0:
     a[j] = value 
   j -=1
  print(a)

    return a時(shí)間復(fù)雜計(jì)算為:我們需要將整個(gè)數(shù)組遍歷一遍,所以這一部分為O(n),在每一次遍歷中都要執(zhí)行一次插入操作,其時(shí)間復(fù)雜度為O(n),所以總時(shí)間復(fù)雜度為O(n2)

選擇排序

選擇排序跟插入排序算法類似,都是將數(shù)組分為有序區(qū)間和未排序區(qū)間,區(qū)別在于插入排序是將一個(gè)新元素插入到有序區(qū)間內(nèi),而選擇排序則是在未排序區(qū)間中找到最小元素,并交換到有序區(qū)間之后。

實(shí)現(xiàn)代碼為:

def selection_sort(a):
 length = len(a)
 if length <=1:
  return
 for i in range(0,length-1):
  min_value = a[i]
  min_index = i
  j = i+1
  while j<length:
   if a[j] < min_value:
    min_value = a[j]
    min_index = j
   j += 1
  a[i],a[min_index] = a[min_index],a[i]

    return a時(shí)間復(fù)雜度計(jì)算:數(shù)組長(zhǎng)度為n,一共需要尋找n次最小值,每次尋找最小值都要遍歷未排序區(qū)間一次,其時(shí)間復(fù)雜度為O(n),乘以n次為O(n2)

相關(guān)文章

最新評(píng)論

乌苏市| 民勤县| 化德县| 彝良县| 旌德县| 荥经县| 布尔津县| 梁山县| 敦化市| 宁都县| 若尔盖县| 绥江县| 温宿县| 苗栗市| 洛隆县| 卓尼县| 肇源县| 苍南县| 崇义县| 金湖县| 建德市| 交城县| 徐汇区| 乌拉特中旗| 巴东县| 郧西县| 西华县| 铁岭市| 正定县| 安塞县| 固原市| 育儿| 宜都市| 建昌县| 交口县| 陕西省| 昌都县| 武穴市| 抚顺市| 浑源县| 吴桥县|