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

使用python實(shí)現(xiàn)希爾、計(jì)數(shù)、基數(shù)基礎(chǔ)排序的代碼

 更新時(shí)間:2019年12月25日 15:20:36   作者:Nolinked  
希爾排序是一個(gè)叫希爾的數(shù)學(xué)家提出的一種優(yōu)化版本的插入排序。這篇文章主要介紹了使用python實(shí)現(xiàn)希爾、計(jì)數(shù)、基數(shù)基礎(chǔ)排序,需要的朋友可以參考下

希爾排序

希爾排序是一個(gè)叫希爾的數(shù)學(xué)家提出的一種優(yōu)化版本的插入排序。

首先取一個(gè)整數(shù)d1=n//2,將元素分為d1個(gè)組,每組相鄰元素之間的距離為d1,在各組內(nèi)進(jìn)行直接插入排序。

取第二個(gè)整數(shù)d2=d1//2,重復(fù)上述分組排序過程,直到di=1,即所有元素在同一組內(nèi)進(jìn)行直接插入排序。

希爾排序是使整體數(shù)據(jù)越來越接近有序;最后一趟排序使得所有數(shù)據(jù)有序。

實(shí)現(xiàn)

# 希爾排序
def shell_sort(li):
  n = len(li)
  gap = n // 2
  while gap > 0:
    for i in range(gap, n):
      temp = li[i]
      j = i - gap
      while j >= 0 and li[j] > temp:
        li[j + gap] = li[j]
        j -= gap
      li[j + gap] = temp

    gap //= 2

算法分析

  • 時(shí)間復(fù)雜度:O(n1.3)
  • 最好時(shí)間復(fù)雜度:O(n)
  • 最壞時(shí)間復(fù)雜度:O(n2)
  • 空間復(fù)雜度:O(1)
  • 穩(wěn)定性:不穩(wěn)定

計(jì)數(shù)排序

計(jì)數(shù)排序是一種非比較性質(zhì)的排序算法,元素從未排序狀態(tài)變?yōu)橐雅判驙顟B(tài)的過程,是由額外空間的輔助和元素本身的值決定的。
計(jì)數(shù)排序過程中不存在元素之間的比較和交換操作,根據(jù)元素本身的值,將每個(gè)元素出現(xiàn)的次數(shù)記錄到輔助空間后,通過對輔助空間內(nèi)數(shù)據(jù)的計(jì)算,即可確定每一個(gè)元素最終的位置。

  1. 根據(jù)待排序集合中最大元素和最小元素的差值范圍,申請額外空間;
  2. 遍歷待排序集合,將每一個(gè)元素出現(xiàn)的次數(shù)記錄到元素值對應(yīng)的額外空間內(nèi);
  3. 對額外空間內(nèi)數(shù)據(jù)進(jìn)行計(jì)算,得出每一個(gè)元素的正確位置;
  4. 將待排序集合每一個(gè)元素移動到計(jì)算得出的正確位置上。

實(shí)現(xiàn)

def count_sort(li, max_num=100):
  count = [0 for _ in range(max_num + 1)]

  for val in li:
    count[val] += 1
  li.clear()
  # 表示i這個(gè)數(shù)出現(xiàn)了v次
  for i, v in enumerate(count):
    for _ in range(v):
      li.append(i)

算法分析

假定原始數(shù)列的規(guī)模是N

最大值和最小值的差是M

計(jì)數(shù)排序的時(shí)間復(fù)雜度是O(N+M)

如果不考慮結(jié)果數(shù)組,只考慮中間數(shù)組大小的話,空間復(fù)雜度是O(M)

基數(shù)排序

基數(shù)排序(英語:Radix sort)是一種非比較型整數(shù)排序算法,其原理是將整數(shù)按位數(shù)切割成不同的數(shù)字,然后按每個(gè)位數(shù)分別比較。

由于整數(shù)也可以表達(dá)字符串(比如名字或日期)和特定格式的浮點(diǎn)數(shù),所以基數(shù)排序也不是只能使用于整數(shù)。

多關(guān)鍵字排序:現(xiàn)在有一個(gè)員工,要求按照薪資排序,年齡相同的員工按照按照年齡排序。

先按照年齡進(jìn)行排序,再按照薪資進(jìn)行穩(wěn)定的排序。

對32,13,94,52,17,54,93進(jìn)行排序,是否可以看作多關(guān)鍵字排序?

實(shí)現(xiàn)

# 基數(shù)排序
def radix_sort(li):
  max_num = max(li)
  i = 0
  while (10 ** i <= max_num):
    buckets = [[] for _ in range(10)]
    for val in li:
      # i=0 個(gè)位 i=1 十位 i=2 百位 ..
      digit = val // (10**i) % 10
      buckets[digit].append(val)
    li.clear()
    for bucket in buckets:
      for val in bucket:
        li.append(val)
    i += 1

算法分析

  • 時(shí)間復(fù)雜度:O(kn)
  • 最好時(shí)間復(fù)雜度:O(kn)
  • 最壞時(shí)間復(fù)雜度:O(kn)
  • 空間復(fù)雜度:O(n+k)
  • 穩(wěn)定性:穩(wěn)定

總結(jié)

以上所述是小編給大家介紹的使用python實(shí)現(xiàn)希爾、計(jì)數(shù)、基數(shù)基礎(chǔ)排序,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • Python實(shí)現(xiàn)批量下載文件

    Python實(shí)現(xiàn)批量下載文件

    之前給大家分享的python 多線程抓取網(wǎng)頁,不過這個(gè)只能用python 來抓取到網(wǎng)頁的源代碼,如果你想用做python 下載文件的話,上面的可能就不適合你了,最近我在用python 做文件下載的時(shí)候就遇到這個(gè)問題了,不過最終得以解決,我把代碼發(fā)出來
    2015-05-05
  • Python的iOS自動化打包實(shí)例代碼

    Python的iOS自動化打包實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Python的iOS自動化打包的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Python實(shí)現(xiàn)PDF轉(zhuǎn)換文本詳解

    Python實(shí)現(xiàn)PDF轉(zhuǎn)換文本詳解

    這篇文章主要介紹了詳解用Python把PDF轉(zhuǎn)換為文本方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10
  • Python簡單實(shí)現(xiàn)查找一個(gè)字符串中最長不重復(fù)子串的方法

    Python簡單實(shí)現(xiàn)查找一個(gè)字符串中最長不重復(fù)子串的方法

    這篇文章主要介紹了Python簡單實(shí)現(xiàn)查找一個(gè)字符串中最長不重復(fù)子串的方法,涉及Python針對字符串的簡單遍歷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • Python調(diào)用Windows命令打印文件

    Python調(diào)用Windows命令打印文件

    Windows命令行打印文件使用print 命令,具體用法可使用help print查看,下面是使用Python調(diào)用print指令執(zhí)行打印文件功能的代碼,需要的朋友可以參考下
    2020-02-02
  • Python腳本在后臺持續(xù)運(yùn)行的方法詳解

    Python腳本在后臺持續(xù)運(yùn)行的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Python腳本在后臺持續(xù)運(yùn)行的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • python?嵌套型partials的使用

    python?嵌套型partials的使用

    這篇文章主要介紹了python?嵌套型partials的使用,partial對象中包含partial對象的使用,下文更多詳細(xì)介紹需要的小伙伴可以參考一下
    2022-03-03
  • Python+Matplotlib繪制雙y軸圖像的示例代碼

    Python+Matplotlib繪制雙y軸圖像的示例代碼

    這篇文章主要介紹了如何利用python的matplotlib繪制雙Y軸圖像,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2022-04-04
  • 解決安裝torch后,torch.cuda.is_available()結(jié)果為false的問題

    解決安裝torch后,torch.cuda.is_available()結(jié)果為false的問題

    這篇文章主要介紹了解決安裝torch后,torch.cuda.is_available()結(jié)果為false的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Windows環(huán)境打包python工程為可執(zhí)行程序的詳細(xì)過程

    Windows環(huán)境打包python工程為可執(zhí)行程序的詳細(xì)過程

    我的開發(fā)環(huán)境是windows7,然后系統(tǒng)是64位,安裝的python和wxpython都是32位的,本文記錄我怎樣用pyinstaller打包我用python開發(fā)的工程,在網(wǎng)上搜索了很多資源,基本上都是不全的,所以我在這兒記錄一下這個(gè)比較完整的過程,一起看看吧
    2024-01-01

最新評論

甘南县| 文成县| 郁南县| 二连浩特市| 乡城县| 岳阳市| 宣汉县| 曲周县| 旬阳县| 五原县| 手游| 大港区| 札达县| 南川市| 贡觉县| 湾仔区| 堆龙德庆县| 青铜峡市| 富蕴县| 莱州市| 乌鲁木齐县| 肇源县| 仁怀市| 洞口县| 永嘉县| 南木林县| 仙游县| 右玉县| 民县| 凤城市| 宁阳县| 香河县| 禄丰县| 清原| 威远县| 安陆市| 芮城县| 嵊泗县| 达日县| 班玛县| 富蕴县|