C 計數排序例項詳解

2022-10-04 00:57:11 字數 1182 閱讀 4919

計數排序

計數排序是一種非比較的排序演算法

優勢:計數排序在對於一定範圍內的整數排序時,時間複雜度為o(n+k)  (k為整數在範圍)快於任何比較排序演算法,因為基於比較的排序時間複雜度在理論上的上下限是o(n*log(n))。

缺點:計數排序是一種犧牲空間換取時間的做法,並且當k足夠大時o(k)>o(n*log(n效率反而不如比較的排序演算法。並且只能用於對無符號整形排序。

時間複雜度:

o(n)  k足夠大時為o(k)

空間複雜度:

o(最大數-最小數)

效能:計數排序是一種穩定排序

**實現:

#include

#include

#include

using namespace std;

//計數排序,適用於無符號整形

void countsort(int* a, size_t size)

if (a[i] & min)

} size_t range = max - min + 1; //要開闢的陣列範圍

size_t* count = new size_t[range];

memset(count, 0, sizeof(size_t)*range); //初始化為0

//統計每個數出現的次數

for (size_t i = 0; i < size; ++i) //從原陣列中取數,原陣列個數為size

//寫回到原陣列

size_t index = 0;

for (size_t i = 0; i < range; ++i) //從開闢的陣列中讀取,開闢的陣列大小為range

} delete count; }

void print(int* a, size_t size)

cout << endl;

} #include "countsort.h"

void testcountsort()

; size_t size = sizeof(arr) / sizeof(arr[0]);

countsort(arr, size);

print(arr, size);

}程式設計客棧

int main()

本文標題: c++ 計數排序例項詳解

本文位址:

計數排序詳解 O n

計數排序基本思路為 我們希望能線性的時間複雜度排序,如果乙個乙個比較,顯然是不實際的,書上也在決策樹模型中論證了,比較排序的情況為nlogn的複雜度。既然不能乙個乙個比較,我們想到乙個辦法,就是如果我在排序的時候就知道他的位置,那不就是掃瞄一遍,把他放入他應該的位置不就可以了嘛。要知道他的位置,我們...

計數排序演算法詳解

經典排序演算法 計數排序counting sort 注意與基數排序區分,這是兩個不同的排序 計數排序的過程類似小學選班幹部的過程,如某某人10票,作者9票,那某某人是班長,作者是副班長 大體分兩部分,第一部分是拉選票和投票,第二部分是根據你的票數入桶 看下具體的過程,一共需要三個陣列,分別是待排陣列...

C 排序插入排序例項詳解

排序 插入排序 插入排序的基本思想是每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。常見的插入排序有插入排序 insertion sort 希爾排程式設計客棧序 shell sort 二叉查詢樹排序 tree sort 圖書館排序 libra...