基本排序演算法 之八 計數排序

2021-09-23 08:04:42 字數 546 閱讀 4046

前面介紹的七種排序演算法都屬於 基於比較的排序演算法(cba式演算法)。這類演算法的共同點就是:時間複雜度最優只能到o(nlogn)。接下來包括這次介紹的三種演算法都屬於非比較演算法,其時間複雜度平均情況下均為o(k·n),k為常數。

計數排序又叫鴿巢排序。就是用乙個與 數列最大數數值 相等長度 的陣列記錄每個元素出現的次數。然後遍歷記錄陣列,按照記錄的個數列印下標。這種排序在數值小的時候特別快。

但是,也特別不實用。一是 最大數太大就得開乙個特大的陣列;二是 陣列下標只能為非負整數。

//找出數列最大數

int findmax(int arr, int lo, int hi)

return max;

}void countsort(int arr, int lo, int hi)

int *p = arr;

for(int j = 0; j < maxnum + 1; j++)

}}

顯然,該演算法時間複雜度為o(2n),而且是穩定的。

演算法導論之八計數排序

1.定理1 在最壞情況下,任何比較排序演算法都需要做 定理2 堆排序和歸併排序都是漸近最優的比較排序演算法。2.計數排序的思想是 對每乙個輸入元素x,確定小於x的個數,前提條件時假設n個輸入元素中的每乙個都是在0到k區間內的乙個整數。3.計數排序演算法的輸入是陣列a 1.n alength n,陣列...

排序演算法之 計數排序法 八

include include include include define len 20 void show int str void malloc int size void show int str void malloc int size return result void count s...

演算法 排序 計數排序

計數排序不是基於比較的排序演算法,其核心在於將輸入的資料值轉化為鍵儲存在額外開闢的陣列空間中。作為一種線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數。計數排序 counting sort 是一種穩定的排序演算法。計數排序使用乙個額外的陣列c,其中第i個元素是待排序陣列a中值等於i...