日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

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

系統(tǒng) 2147 0

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

插入排序

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

Python實(shí)現(xiàn)插入排序和選擇排序的方法_第1張圖片

具體實(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]
            
            
          

??? 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ū)間之后。

Python實(shí)現(xiàn)插入排序和選擇排序的方法_第2張圖片

實(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
            
              < 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ù)組長度為n,一共需要尋找n次最小值,每次尋找最小值都要遍歷未排序區(qū)間一次,其時(shí)間復(fù)雜度為O(n),乘以n次為O(n2)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 雷山县| 贵阳市| 宿松县| 盈江县| 民勤县| 安龙县| 饶阳县| 井冈山市| 泽库县| 宝山区| 梧州市| 湖南省| 阜宁县| 建宁县| 桂阳县| 田林县| 乐陵市| 含山县| 馆陶县| 托克托县| 大同市| 犍为县| 县级市| 乐昌市| 平泉县| 陕西省| 湘潭县| 石台县| 荔波县| 涿州市| 渝北区| 陇川县| 新疆| 凯里市| 泊头市| 保山市| 和顺县| 井陉县| 辽阳市| 海盐县| 当涂县|