日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

计数排序之python

發布時間:2023/11/27 生活经验 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计数排序之python 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

計數排序( Count sort)

一個不需要比較的,類似于桶排序的線性時間排序算法。該算法是對已知數量范圍的數組進行排序。其時間復雜度為O(n),適用于小范圍集合或重復元素多的排序。計數排序是用來排序0到100之間的數字的最?
好的算法。

1.算法描述:

“抽屜原理”

  • 找出待排序的數組中最大和最小的元素;
  • 統計數組中每個值為i的元素出現的次數,存入數組C的第i項;
  • 對所有的計數累加(從C中的第一個元素開始,每一項和前一項相加);
  • 反向填充目標數組:將每個元素i放在新數組的第C(i)項,每放一個元素就將C(i)減去1。

2.算法屬性:

  • 穩定性:不穩定
  • 時間復雜度:O(n)
  • 空間復雜度:O(M)

3.代碼實現

#時間復雜度O(n)
#kumata 's code
'''
三個步驟:
1.找出最大最小值  
2.根據最大最小值差制造抽屜,把元素放進“抽屜”
3.把“抽屜”里面的元素拿出來重新排列
'''
import time
def count_sort(nums):start = time.time()    mmax, mmin = nums[0], nums[0]#第一個for循環找到最大值和最小值for i in range(1, len(nums)):if (nums[i] > mmax): mmax = nums[i]elif (nums[i] < mmin): mmin = nums[i]print('最大值:',mmax)print('最小值:',mmin)#“發抽屜”,制造多少個抽屜drawer = mmax - mmin + 1#剛開始抽屜里全部都是0counts = [0] * drawerprint('抽屜數:',counts)   #通過index把元素往抽屜里面放for i in range (len(nums)):counts[nums[i] - mmin] = counts[nums[i] - mmin] + 1#把抽屜里面的元素拿出來重新排列#第一個for循環為抽屜的大小,第二個為抽屜里每個元素的個數,所以時間復雜度實為O(n)pos = 0for i in range(drawer):      for j in range(counts[i]):nums[pos] = i + mminpos += 1t = time.time() - startreturn nums, t#輸出結果
最大值: 45
最小值: 1
抽屜數: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

([1, 2, 3, 4, 5, 6, 8, 11, 22, 45], 0.0005011558532714844)

?

轉載于:https://www.cnblogs.com/kumata/p/9122997.html

總結

以上是生活随笔為你收集整理的计数排序之python的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。