【排序算法】计数排序
生活随笔
收集整理的這篇文章主要介紹了
【排序算法】计数排序
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
當(dāng)輸入的元素是 n 個(gè) 0 到 k 之間的整數(shù)時(shí),它的運(yùn)行時(shí)間是 Θ(n + k)。計(jì)數(shù)排序不是比較排序,排序的速度快于任何比較排序算法。
由于用來(lái)計(jì)數(shù)的數(shù)組B的長(zhǎng)度取決于待排序數(shù)組中數(shù)據(jù)的范圍(等于待排序數(shù)組的最大值與最小值的差加上1),這使得計(jì)數(shù)排序?qū)τ跀?shù)據(jù)范圍很大的數(shù)組,需要大量?jī)?nèi)存。計(jì)數(shù)排序是用來(lái)排序0到100之間的數(shù)字的最好的算法,但是它不適合按字母順序排序人名。但是,計(jì)數(shù)排序可以用在基數(shù)排序中的算法來(lái)排序數(shù)據(jù)范圍很大的數(shù)組。
測(cè)試代碼:
#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]++; //記錄該元素的個(gè)數(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.??漫畫:什么是計(jì)數(shù)排序??
總結(jié)
以上是生活随笔為你收集整理的【排序算法】计数排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 算法 | 快速排序
- 下一篇: 判断两个结构体是否相等