演算法設計之計數排序 (C 實現)

2021-06-23 08:54:27 字數 894 閱讀 3972

之前的文章介紹的一些排序演算法有乙個共同特點,它們都是基於比較的。這些演算法都有的乙個性質就是:在排序的最終結果中,各元素的次序依賴於它們之間的比較。對包含n個元素的輸入序列來說,任何比較排序在最好情況下都要經過nlgn次比較。因此,歸併排序和堆排序是漸進最優的,任何已知的比較排序最多就是在常數因子上優於它們。本篇文章介紹一種線性時間複雜度的排序演算法--計數排序:

計數排序假設n個輸入元素中的每乙個都是在 0到k閉區間內的乙個整數,其中k為某個整數。計數排序的基本思想是:對每乙個輸入元素x,確定小於x的元素個數。利用這一資訊就可以 直接把x放到它在輸出陣列中的位置上。

我發現向量比陣列用起來更舒服。不過要注意,用來訪問向量的索引值是無符號整形,定義變數時要使用 size_t

或者把無符號整形強轉為有符號整形。

// countingsort2.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include "iostream"

#include "vector"

using namespace std;

void countingsort(vector& ,vector&,int);

int _tmain(int argc, _tchar* argv)

; int k=5;//待排序的元素均小於此值

vectora(a,a+21);//輸入陣列

vectorb(a.size());//存放排序的輸出

演算法之計數排序

核心思想 通過計算某個資料之前有多少個資料來確定自身的位置,不通過資料之間的相互比較,所以是非比較排序。原始計數排序 時間複雜度 o n k k為資料量 缺點 如果資料只有兩個,9999,10000,那麼會額外建立容量為10000的陣列,浪費空間。public static int countsor...

演算法之計數排序

原理 用乙個陣列記錄待排序陣列 現的數字。最低位代表最小值,偏移量是記錄陣列中的下標 待排序陣列 2 1 4 可以表示為 記錄陣列 1 1 0 1 陣列長度為 4 1 1 然後根據記錄陣列輸出結果 public static void countsort int arr if arr.length ...

排序演算法之計數排序

今在學習中,遇到計數排序演算法,雖然其對待排序的序列要求嚴格,但對於符合條件的序列來說,其時間複雜度很小。故列於此,僅為學習記憶。參考資料 對於僅由大寫字母 或小寫字母 構成的無序序列,可採用下面演算法進行排序。該演算法不在序列的每個元素間進行比較,而是使用了乙個額外的help整型字串來記錄每個元素...