計數排序與桶排序python實現

計數排序與桶排序python實現

計數排序

計數排序原理:

  • 找到給定序列的最小值與最大值

  • 創建一個長度為最大值-最小值+1的數組,初始化都為0

  • 然后遍歷原序列,并為數組中索引為當前值-最小值的值+1

  • 此時數組中已經記錄好每個值的數量,自然也就是有序的了

例如:

計數排序實現

下面為列表的計數排序


def count_sort(s):"""計數排序"""# 找到最大最小值min_num = min(s)max_num = max(s)# 計數列表count_list = [0]*(max_num-min_num+1)# 計數for i in s:count_list[i-min_num] += 1s.clear()# 填回for ind,i in enumerate(count_list):while i != 0:s.append(ind+min_num)i -= 1if __name__ == '__main__':a = [3,6,8,4,2,6,7,3]count_sort(a)print(a)

計數排序的缺點

當數值中有非整數時,計數數組的索引無法分配

桶排序

桶排序原理:

  • 桶排序與計數排序類似,但可以解決非整數的排序

  • 桶排序相當于把計數數組劃分為按順序的幾個部分

  • 每一部分叫做一個桶,它來存放處于該范圍內的數

  • 然后再對每個桶內部進行排序,可以使用其他排序方法如快速排序

  • 最后整個桶數組就是排列好的數據,再將其返回給原序列

舉例:

桶排序實現

這里選擇桶的數量為序列元素個數+1,范圍分別是5等分與最大值,和上面那個圖一樣。

具體問題應該按照具體情況進行桶劃分

這里桶內部排序直接調用了sorted


def bucket_sort(s):"""桶排序"""min_num = min(s)max_num = max(s)# 桶的大小bucket_range = (max_num-min_num) / len(s)# 桶數組count_list = [ [] for i in range(len(s) + 1)]# 向桶數組填數for i in s:count_list[int((i-min_num)//bucket_range)].append(i)s.clear()# 回填,這里桶內部排序直接調用了sortedfor i in count_list:for j in sorted(i):s.append(j)if __name__ == '__main__':a = [3.2,6,8,4,2,6,7,3]bucket_sort(a) print(a) # [2, 3, 3.2, 4, 6, 6, 7, 8]

總結

計數排序與桶排序都是以犧牲空間換時間,雖然很快,但由于可能產生大量的空位置導致內存增大,尤其是計數排序。

桶排序中盡量使每個桶中的元素個數均勻分布最好

?

轉載于:https://www.cnblogs.com/sfencs-hcy/p/10612422.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536610.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536610.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536610.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

perl腳本執行linux命令行,Perl調用shell命令方法小結

一、systemperl也可以用system調用shell的命令,它和awk的system一樣,返回值也是它調用的命令的退出狀態.代碼如下:[rootAX3sp2 ~]# cat aa.pl#! /usr/bin/perl -w$file "wt.pl";system("ls -l wt.pl");$result system "ls -l $file";print &qu…

JVM快速調優手冊02:常見的垃圾收集器

2019獨角獸企業重金招聘Python工程師標準>>> 如果說收集算法是內存回收的方法論,那么垃圾收集器就是內存回收的具體實現。 Java虛擬機規范中對垃圾收集器應該如何實現并沒有任何規定,因此不同的廠商、不同版本的虛擬機所提供的垃圾收集器都可…

linux運維平臺工具,Linux運維自動化工具 Kickstart

簡介:批量安裝操作系統工具之 Kickstart ,RedHat 早前推出的產品( 不多說了,現在都玩 Cobbler 啦,見 http://www.linuxidc.com/Linux/2016-04/129977.htm )。測試環境:CentOS 6.6 x86_64 minimal一、安裝軟件包shell &…

PostgreSQL 并行查詢概述

2019獨角獸企業重金招聘Python工程師標準>>> PostgreSQL從9.6版本開始加入并行查詢,并在PostgreSQL10和PostgreSQL11分別做了大量加強工作。下面從: 何時啟用并行查詢功能并行查詢是如何工作的worker進程數量越多,查詢性能越高嗎三…

linux下得到date命令,linux下date命令獲得今天日期的用法

1。獲取今天日期的各類用法:oracle[roottest ~]# date %Y_%m_%d2016_05_22[roottest ~]# date %Y_%m_%d2016_05_22ide[roottest ~]# date "%Y_%m_%d"2016_05_22[roottest ~]# date %Y_%m_%d2016_05_22[roottest ~]# date "%Y_%m_%d"2016_05_22i…

Quarkus:一個Kubernetes原生Java框架

Red Hat發布了Quarkus,這是一個為GraalVM和OpenJDK HotSpot量身定制的Kubernetes原生Java框架。Quarkus的目標是使Java成為Kubernetes和無服務器環境中的領先平臺,為開發人員提供統一的反應式和命令式編程模型。 Quarkus利用Java開發人員使用的一系列庫&…

分區安裝linux,怎樣安裝Linux?

我的機子上裝了win2000,想裝個Linux可是在安裝時,竟然D 、E盤都不見了,win2000也進不去了我只得重裝2000,現在我都不敢裝Linux了請高手指點!|你最好用PQMAGIC先分區,大約2。5G空間就夠了,可以參…

linux scp傳輸文件命令

scp -r /opt/test root192.168.2.105:/opt 轉載于:https://www.cnblogs.com/LynnChen/p/10620576.html

pg10 10.3 1 linux64,Install Postgresql 10 In Ubutnu 16.04 LTS

PostgreSQL數據庫是一個高性能的全功能的開源關系型數據庫,這里講解一下如何在Ubuntu 16.04 LTS 下安裝 PostgreSQL 10。添加軟件源wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -sudo sh -c echo "deb http://apt.po…

nginx能訪問html靜態文件但無法訪問php文件

nginx.conf中紅框部分修改成你的實際網站根目錄轉載于:https://www.cnblogs.com/IT-Crowd/p/10626549.html

linux虛擬光驅掛載方法,Linux操作系統下虛擬光驅(iso)的掛載

1、掛載iso文件一般查看iso文件內容,只需要:#mount -t iso9660 -o loop xxx.iso /mnt/cdrom就可以在/mnt/cdrom下看到xxx.iso的內容。2、復制光盤為iso鏡像#dd if/dev/hdb ofxxx.iso或者#cp /dev/cdrom xxx.iso3、虛擬iso為設備#rm -rf /dev/cdrom //刪除…

[深度概念]·K-Fold 交叉驗證 (Cross-Validation)的理解與應用

個人主頁--> xiaosongshine.github.io/ 1.K-Fold 交叉驗證概念在機器學習建模過程中,通行的做法通常是將數據分為訓練集和測試集。測試集是與訓練獨立的數據,完全不參與訓練,用于最終模型的評估。在訓練過程中,經常會出現過擬合…

linux mariadb 升級,linux mariadb

linux mariadb轉載 一 安裝下載mariaDB MariaDB-5.5.29-rhel5-x86_64-common.rpm 和MariaDB-5.5.29-rhel5-x86_64-server.rpm 包,MariaDB-5.5.29-rhel5-x86_64-client.rpm2.然后再http.//yum。mariadb。org/ 找到 RPM-GPG-KEY-MariaDB 這個PGP文件,把文件放入到/etc…

Linux Note

日期:2019/3/31 內容:Linux學習筆記 一、Linux命令 ls -l 操作效果 第一列:文件權限 一共10位。 01(r)2(w)3(x)4(r)5(w)6(x)7(r)8(w)9(x)文件類型文件所有者權限 usr權限,u權限文件所有者所屬組成員的權限 group權限,g…

linux查看usb鼠標是否啟動,Linux USB鼠標驅動注解及測試

參考2.6.14版本中的driver/usb/input/usbmouse.c。鼠標驅動可分為多個部分:驅動加載部分、probe部分、open部分、urb回調函數處理部分。下文陰影部分為注解。一、 驅動加載部分static int __init usb_mouse_init(void){int retval usb_register(&usb_mouse_…

退役前的最后的做題記錄upd:2019.04.04

考試考到自閉&#xff0c;每天被吊打。 還有幾天可能就要AFO了呢。。。 Luogu3602&#xff1a;Koishi Loves Segments 從左向右&#xff0c;每次刪除右端點最大的即可。 [HEOI2014]南園滿地堆輕絮 答案一定是 \(\lceil \frac{max_{1\le i < j \le n}(a_i-a_j)}{2} \rceil\)。…

linux ssh-add,linux – 如何使ssh-add從文件讀取密碼?

根據您的發行版本和ssh-add的版本,您可以使用或不使用以這種方式從stdin讀取密碼的ssh-add的-p選項&#xff1a;cat passfile | ssh-add -p keyfile如果這不工作,您可以使用Expect,Unix工具使交互式應用程序非互動.你必須從你的包管理器安裝它.我為你準備了一個工具.只需將內容…

linux nginx F配置,linux下nginx的安裝及配置

1、安裝nginx前&#xff0c;咱們首先要確保系統安裝了g、gcc、openssl-devel、pcre-devel和zlib-devel軟件&#xff0c;可經過如圖所示命令進行檢測,若是以安裝咱們能夠經過圖二所示卸載&#xff1a;linuxyum install gcc-cyum -y install zlib zlib-devel openssl openssl--de…

你缺啥,你缺一個得力的辦公軟件

其實你缺啥我都知道&#xff0c;但是&#xff0c;我又不能給你發工資&#xff0c;還得你自己努力工作才行。不過我可以給你分享幾款好用的辦公軟件&#xff0c;對你在進行有效率的辦公會有很大幫助的。曲奇辦公是一款以文檔為載體的企業辦公管理應用。幫助企業快速實現業務標準…

C語言做一個表格的程序,用C語言畫個簡單表格

今天見到個題目&#xff0c;就把他做了&#xff0c;題目如下&#xff1a;在圖形環境中很容易做出漂亮的表格。但在控制臺環境中就比較困難了。有的時候可以用一些符號大略地模擬&#xff1a;(word文檔中可能不整齊&#xff0c;拷貝到記事本中看)-------------|abc |xyztt|…