欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

希爾排序

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

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

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

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

實現(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

算法分析

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

計數(shù)排序

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

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

實現(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這個數(shù)出現(xiàn)了v次
  for i, v in enumerate(count):
    for _ in range(v):
      li.append(i)

算法分析

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

最大值和最小值的差是M

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

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

基數(shù)排序

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

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

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

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

對32,13,94,52,17,54,93進行排序,是否可以看作多關鍵字排序?

實現(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 個位 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

算法分析

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

總結

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

相關文章

  • Pyinstaller加密打包成反編譯可執(zhí)行文件

    Pyinstaller加密打包成反編譯可執(zhí)行文件

    這篇文章主要為大家介紹了Pyinstaller加密打包成可執(zhí)行文件方法示例。有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 用python自動生成日歷

    用python自動生成日歷

    這篇文章主要介紹了如何用python自動生成日歷,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-04-04
  • Python基礎之字典的詳細使用教程

    Python基礎之字典的詳細使用教程

    字典作為Python的一個內置數(shù)據(jù)結構,和列表一樣都是可變序列的,但是它是無序的,以鍵值對的方式存儲數(shù)據(jù)。本文將詳解一下Python中字典的使用,需要的可以參考一下
    2022-07-07
  • flask實現(xiàn)python方法轉換服務的方法

    flask實現(xiàn)python方法轉換服務的方法

    flask是一個web框架,可以通過提供的裝飾器@server.route()將普通函數(shù)轉換為服務,這篇文章主要介紹了flask實現(xiàn)python方法轉換服務,需要的朋友可以參考下
    2022-05-05
  • 使用python實現(xiàn)mqtt的發(fā)布和訂閱

    使用python實現(xiàn)mqtt的發(fā)布和訂閱

    這篇文章主要介紹了使用python實現(xiàn)mqtt的發(fā)布和訂閱,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • Python裝飾器泛化公有和私有屬性作用詳解

    Python裝飾器泛化公有和私有屬性作用詳解

    這篇文章主要為大家介紹了Python裝飾器泛化公有和私有屬性作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Python實現(xiàn)自動化處理PDF文件的方法詳解

    Python實現(xiàn)自動化處理PDF文件的方法詳解

    這篇文章主要為大家詳細介紹了如何使用Python完成簡單的PDF文件處理操作,如PDF文件的批量合并、拆分、加密以及添加水印等,需要的可以參考一下
    2022-09-09
  • 在Python 2.7即將停止支持時,我們?yōu)槟銕砹艘环輕ython 3.x遷移指南

    在Python 2.7即將停止支持時,我們?yōu)槟銕砹艘环輕ython 3.x遷移指南

    這篇文章主要介紹了在Python 2.7即將停止支持時我們?yōu)槟銣蕚淞艘环輕ython 3.x遷移指南的相關資料,需要的朋友可以參考下
    2018-01-01
  • Python函數(shù)的默認參數(shù)設計示例詳解

    Python函數(shù)的默認參數(shù)設計示例詳解

    這篇文章主要給大家介紹了關于Python函數(shù)的默認參數(shù)設計的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-12-12
  • 三步實現(xiàn)Django Paginator分頁的方法

    三步實現(xiàn)Django Paginator分頁的方法

    這篇文章主要介紹了三步實現(xiàn)Django Paginator分頁的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06

最新評論