【排序算法】计数排序
生活随笔
收集整理的這篇文章主要介紹了
【排序算法】计数排序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
當輸入的元素是 n 個 0 到 k 之間的整數(shù)時,它的運行時間是 Θ(n + k)。計數(shù)排序不是比較排序,排序的速度快于任何比較排序算法。
由于用來計數(shù)的數(shù)組B的長度取決于待排序數(shù)組中數(shù)據(jù)的范圍(等于待排序數(shù)組的最大值與最小值的差加上1),這使得計數(shù)排序?qū)τ跀?shù)據(jù)范圍很大的數(shù)組,需要大量內(nèi)存。計數(shù)排序是用來排序0到100之間的數(shù)字的最好的算法,但是它不適合按字母順序排序人名。但是,計數(shù)排序可以用在基數(shù)排序中的算法來排序數(shù)據(jù)范圍很大的數(shù)組。
測試代碼:
#include <iostream> using namespace std;void print(int a[], int sz) {for (int i = 0; i < sz; i++) cout << a[i] << " ";cout << endl; }void CountingSort(int arr[], int sz) {int i, j, k;int idx = 0;int min, max;min = max = arr[0];for (i = 1; i < sz; i++) {min = (arr[i] < min) ? arr[i] : min;max = (arr[i] > max) ? arr[i] : max;}k = max - min + 1;int *B = new int[k];for(i = 0; i < k; i++)B[i] = 0;for(i = 0; i < sz; i++) B[arr[i] - min]++; //記錄該元素的個數(shù)for(i = min; i <= max; i++)for(j = 0; j < B[i - min]; j++) arr[idx++] = i;print(arr, sz);delete[] B; }int main() {int a[] = { 5,9,3,9,10,9,2,4,13,10 };const size_t sz = sizeof(a) / sizeof(a[0]);print(a, sz);cout << "----------------------\n";CountingSort(a, sz); }參考資料
1.??漫畫:什么是計數(shù)排序??
總結(jié)
以上是生活随笔為你收集整理的【排序算法】计数排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法 | 快速排序
- 下一篇: 判断两个结构体是否相等