資料結構 中的計數排序 CountSort

2021-08-01 09:41:18 字數 1513 閱讀 3515

計數排序的概念:

1.計數排序的原理:設被排序的陣列為a,排序後儲存到b,c為臨時陣列。所謂計數,首先是通過乙個陣列c[i]計算大小等於i的元素個數,此過程只需要一次迴圈遍歷就可以;在此基礎上,計算小於或者等於i的元素個數,也是一重迴圈就完成。下一步是關鍵:逆序迴圈,從length[a]到1,將a[i]放到b中第c[a[i]]個位置上。原理是:c[a[i]]表示小於等於a[i]的元素個數,正好是a[i]排序後應該在的位置。而且從length[a]到1逆序迴圈,可以保證相同元素間的相對順序不變,這也是計數排序穩定性的體現。在陣列a有附件屬性的時候,穩定性是非常重要的。

2.計數排序的前提及適用範圍:a中的元素不能大於k,而且元素要作為陣列的下標,所以元素應該為非負整數。而且如果a中有很大的元素,不能夠分配足夠大的空間。所以計數排序有很大侷限性,其主要適用於元素個數多,但是普遍不太大而且總小於k的情況,這種情況下使用計數排序可以獲得很高的效率。

計數排序演算法的基本思想是對於給定的輸入序列中的每乙個元素x,確定該序列中值小於x的元素的個數。一旦有了這個資訊,就可以將x直接存放到最終的輸出序列的正確位置上。例如,如果輸入序列中只有17個元素的值小於x的值,則x可以直接存放在輸出序列的第18個位置上。

如下圖所示:

實現計數排序的**:

cout << "進行計數排序前:";

printarray(arr, n);

countsort(arr, n);

cout << "進行計數排序後:";

printarray(arr, n);

system("pause");

return 0;

}

執行的結果: 

資料結構 計數排序

題目來自灰灰考研 counting sort基本思想 對於給定的輸入序列中的每乙個元素x,確定該序列中值小於x的元素的個數 一旦有了這個資訊,就可以將x直接存放到最終的輸出序列的正確位置上。它建立乙個長度為這個資料範圍的陣列c,c中每個元素記錄要排序陣列中對應記錄的出現個數。下面以示例來說明這個演算...

資料結構 計數排序

計數排序基於桶排序。比如待排陣列 a 5 那麼就需要建造 105 max 100 min 1 6 大小的臨時陣列,將這 5 個元素按照,值減 100 min 作為下標儲存在臨時陣列中。如下圖所示 計數排序 param a paramn private static void jishu int a,...

資料結構 計數排序

之前講到的插入 希爾 選擇 堆 冒泡 快速 歸併排序都屬於比較排序 涉及到兩個數的比較 接下來要講到一種非比較排序演算法 計數排序。1 什麼是計數排序 計數排序是一種非比較性質的排序演算法,元素從未排序狀態變為已排序狀態的過程,是由額外空間的輔助和元素本身的值決定的。計數排序過程中不存在元素之間的比...