排序演算法 最穩定的計數排序

2021-08-05 21:29:49 字數 1094 閱讀 3516

有沒有一種排序演算法的時間複雜度為o(n)呢?

如果面試官這麼問你,千萬不要直接否定!

事實上是有線性時間複雜度的排序演算法,只不過其使用條件有限,只能是滿足條件的整數(0~n)序列,而且需要一定的輔助空間。這就是我們即將要提到的——計數排序。

對於排序演算法來說計數排序是穩定的,跟桶排序相比其所占用的空間是可控的,跟其他比較排序相比它的速度又是快捷的。

其基本思想:用待排序的數作為計數陣列的下標,統計每個數字的個數。然後依次輸出即可得到有序序列。對每乙個元素x,確定出小於x的元素個數。例如,如果有17個元素小於x,則x就是屬於第18個輸出位置。

這個演算法的步驟大致如下:

1. 初始化乙個計數陣列,大小是輸入陣列中的最大的數。

2. 遍歷輸入陣列,遇到乙個數就在計數陣列對應的位置上加一。例如:遇到5,就將計數陣列第五個位置的數加一。

3. 把計數陣列直接覆蓋到輸出陣列(節約空間)。

public

class

countsort

system.out.println("計數排序結果為:");

count(array);

for (int i = 0; i < n; i++)

}private

static

void

count(int array)

int max = 0;

//尋找最大值

for (integer i : array)

}int count = new

int[max + 1];//建立輔助計數陣列

arrays.fill(count, 0);//初始化陣列

//用待排序的數作為計數陣列的下標,統計每個數字的個數

for (int i = 0; i < array.length; i++)

//根據計數陣列,修改原陣列的順序

計數排序與穩定排序

我們常用的排序演算法,有冒泡演算法 快速演算法等,它們都是基於元素之間的比較來進行排序,有一種特殊的演算法不是基於元素比較,而是利用陣列下標來確定元素在陣列的位置,這種演算法就是 計數排序 先來說一下實現的原理,假設有20個隨機整數的陣列array,他們值分別是 9,3,5,4,9,1,2,7,8,...

實現穩定的計數排序

對於給定整數數列,我們可以採取歸併排序將其整理成乙個有序數列。然而,其時間複雜度為o n nlogn。若給出乙個數列,其元素在數軸上分布 密集 則我們不必使用歸併排序,而可以用歸併排序。使用計數排序來對這個列表進行排序。其時間複雜度為o n n m 空間複雜度為o m 其中n為數列長度,m為數列中最...

演算法1 最快最簡單的排序 桶排序 (計數排序)

這個是桶排序,同時也是計數排序。計數排序是對桶排序的一種特殊實現。當桶排序的桶數等於max min 1時,就是計數排序 在我們生活的這個世界中到處都是被排序過的。站隊的時候會按照身高排序,考試的名次需要按照分數排序,網上購物的時候會按照 排序,電子郵箱中的郵件按照時間排序 總之很多東西都需要排序,可...