基礎演算法3 桶排序和排序演算法總結

2021-10-02 11:23:25 字數 1113 閱讀 4106

比較器:定義乙個比較器函式,如果返回負數,認為第乙個引數應該排在前面,如果返回是正數,認為第二個引數應該排在前面,如果返回0,認為誰放前面無所謂。

可用於 基於比較的排序。

桶排序思想下的排序

桶排序思想下的排序都不是基於比較的排序

2)時間複雜度為o(n), 額外空間複雜度為o(n)

3)應用範圍有限,需要樣本的資料狀況滿足桶的劃分。

例子:乙個陣列 裡面放的是員工的年齡,用o(n)的時間複雜度排序。

方法:生成乙個201的陣列,裡面值為0-200. 查詢陣列裡面的值,遇到某個值 對應的位置就加1. 最後根據每個值 有多少個,直接列印結果。

計數排序,最大和最小差值不能太大。

基數排序, 必須是十進位制數,必須基於具體的業務和資料狀況排序。

def

countsort

(data)

: m =

max(data)

排序的穩定性

選擇排序: 時間複雜度o(n^2),空間複雜度o(1),不穩定,比如 3 3 3 3 1–>排位置0時,交換1和3. 3不穩定

氣泡排序: 時間複雜度o(n^2),空間複雜度o(1), 穩定。 相等不交換時穩定

插入排序:時間複雜度o(n^2),空間複雜度o(1),穩定。

歸併排序:時間複雜度o(nlogn), 空間複雜度o(n), 穩定。merge時,相等時 copy左側的

快速排序:時間複雜度o(nlogn), 空間複雜度o(logn),不穩定。 partition時 當前數大於劃分值時 交換 當前數和 大於區域前乙個數。

堆排序:時間複雜度o(n*logn), 空間複雜度o(1),不穩定。

非基於比較的排序(計數排序、基數排序) 都是穩定。

不存在時間複雜度o(n*logn), 空間複雜度低於o(n)的穩定的排序。

工程上的排序

計數型別的 不在乎穩定性的 用快排。時間複雜度低,並且常數項比較低。

集合o(n*logn)和o(n^2)的排序。

比如 len(data)<=47 直接插入排序,因為插入排序的常數項比較低。

len(data)>47時 用快排。 因為排程快。

非基礎型別,一般不用 快排,因為關注穩定性。

基礎演算法 桶排序

在我們生活的這個世界中到處都是被排序過的東東。站隊的時候會按照身高排序,考試 的名次需要按照分數排序,網上購物的時候會按照 排序,電子郵箱中的郵件按照時間排序 總之很多東東都需要排序,可以說排序是無處不在。現在我們舉個具體的例子來介紹 一下排序演算法 我們這裡只需借助乙個一維陣列就可以解決這個問題。...

排序演算法總結 10 桶排序

桶排序假設待排序序列的元素服從 0 1 間的均勻分布,首先將區間 0 1 劃分成m個大小相同的子區間,或稱為桶。然後將所有元素放在各自所屬的區間中。因為序列是均勻分布的,所以各個區間中個元素個數相差不大。然後對每個區間的元素排列,可以用插入排序,因為元素較少,也可用快速排序。然後遍歷每個區間,將各個...

排序演算法 桶排序

桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均勻分配的時候,桶排序使用線性時間 n 但桶排序並不...