計數排序演算法

2021-06-20 08:17:57 字數 1107 閱讀 4304

// countsort.c

#include #include #include typedef int datatype;

typedef char numtype; // 有效個數:2至127

// ( ( 2 ^ ( ( sizeof ( numtype ) * 8 ) - 1 ) - 1 )

#define limit ( numtype ) ( ( 1 << ( ( sizeof ( numtype ) << 3 ) - 1 ) ) - 1 )

typedef short valuetype; // valuetype比numtype大乙個級別的資料型別單位

void countsort(datatype * const, const numtype, const valuetype);

int main(void)

; srand((unsigned int)time(0));

puts("生成隨機數:\n");

for (i = 0; i < limit; ++i)

sum = sizeof (data) / sizeof (data[0]);

if ((sizeof (sum) <= sizeof (numtype)) && (sum <= limit) && (sum > 1))

// 資料個數溢位檢測

countsort(data, sum, (1 << ((sizeof (valuetype) << 3) - 1)) - 1);

puts("\n\n計數排序後:\n");

for (i = 0; i < limit; ++i)

putchar('\n');

getch();

return 0;

}/******************************以上**僅供測試******************************/

// 計數排序

// 僅可用作正整數排序且重複率高的資料

void countsort(datatype * const data, const numtype sum, const valuetype m)



演算法 排序 計數排序

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

演算法 排序 計數排序

計數排序的核心思想就是將需要排序的陣列的元素轉為下標,在輔助空間陣列 輔助空間陣列的初始都是0 中找到對應元素的下標位置,將該位置的元素 掃瞄下標,將對應不為0的下標記錄賦值給原陣列,然後對應下標元素 圖例分析 具體 includevoid countsort int a,int len int m...

計數排序演算法

計數排序利用空間換取時間,實現了時間複雜度為o n k k表示待排序列的最大值 的高效排序,在一定範圍數值的排序中,比快速排序 堆排序更快。1.只適用於對整數排序。因為計數排序需要通過下標確定整數在新陣列中的下標,如果不為整數,那麼下標也就無法確定 2.待排序列在一定的取值範圍內。利用已有陣列構造額...