快速排序 Quick sort 和桶排序 Bucket sort 的區別?

時間 2021-06-04 01:35:46

1樓:豬鼻蛇

我個人認為,找主元分大小組,然後遞迴的排序兩個組,就是快速排序,並沒有正宗與否的概念,如何實現都是具體細節上的選擇。

至於桶排序,這個原理沒有提怎麼分到桶裡面,但實際上演算法描述顯然是對此限定了的,否則也不會有不是比較排序的結論,所以僅從這個原理來推斷是不合理的。

2樓:小耿

不不不。兩者是不同的。雖然表面上看起來兩者很像,桶排序是把資料分到若干個桶裡,再遞迴地對每乙個桶進行排序;上述方法一是把(除了arr[piv]以外的)資料分到前後兩個「桶」裡,再遞迴地分別進行排序。

但是桶排序在把資料分桶的時候,並不是使用資料本身兩兩比較的方法,而是讀取資料某一位上的值再兩兩比較。這就使得桶排序的遞迴深度可以是常數,而不像上述快排方法一,遞迴深度和資料量 n 有關。

桶排序並不屬於比較排序,也就是說它用到了快速排序、歸併排序等這些排序方法所無法獲取的資訊。(但是你可以用比較排序的方式來實現桶排序。)如果桶排序永遠只使用兩個桶,它與快排的效率是一樣的。

但是桶排序可以使用更多(但是有限)的桶,因為我們事先已經知道資料的範圍,因而知道可以用多少個桶來裝。比如我們知道資料取值是0-99,就可以放心建立10個桶,按照十位上的數字(0到9)將資料分到每個桶裡,而不用擔心出現資料100時沒有對應的桶。但是快排假設我們不知道資料的範圍,因此只能把資料按照「比arr[piv]大還是小」分成兩個桶。

(第一次寫完之後發現有理解偏差,因而修改了答案。)

c 中入門排序方法有什麼,桶排序好用嗎

邱昊宇 最好入門的其實是隨機排序,核心演算法就是瞎 JB 試。std mt19937 rng while std is sorted std begin arr std end arr 當然簡單是簡單,但是可能做很多無用功,改進一下就是排列排序 有調理地試。while std next permut...

為什麼快速排序比原生排序快?

甄士隱 首先,阮一峰老師的快排序是存在問題的,具體請看我另乙個回答 阮一峰版快速排序完全是錯的 一文是否存在事實錯誤?真正正確且標準的快排序,可參考我自己實現的一版 go 語言實現 Wang Kai algorithm 至於你的排序比原生 sort 快 4倍,可能的原因有兩個 js 中 sort 排...

為什麼不把合併排序稱為快速排序?

愛麗絲欣 很贊同!補充點 事實上不止歸併排序 快速排序,還有堆排序也是達到了線性對數級別的複雜度。比較這幾種線性對數級別的演算法時,乙個是要考慮到複雜度前面的常數因子的區別 二是要考慮在實際的運用中,堆排序用的非常少,很大程度就是因為堆排序排序時,資料位置相隔很遠,而快排等則很多時候是和相鄰的元素進...