いろいろなことを読んでいます。ソートのカウントの場合、以下のCコードは正常に機能しますが、時間計算量について質問があります。多くの場所で読んでいるように、実際にはO(N)ではありませんが、O(入力配列の最大値-配列の最小値)です。これはNより大きくなる可能性があります。ここで、Nを増やし、同時にmax --minを増やす(範囲-つまり、maxを増やし、minを減らす)と、実行時の複雑さは2次式、つまりO(N 2)になることができますか?または、この種の最悪のケースは、入力配列に同じ値の複数のインスタンスがある場合です。理解しようとするのは本当に明確ではありません。
counting_sortに渡される特定の配列の最小値と最大値を計算したと仮定します。nは入力配列の長さです
void counting_sort_mm(int *array, int n, int min, int max)
{
int i, j, z;
int range = max - min + 1;
int *count = malloc(range * sizeof(*array));
for(i = 0; i < range; i++) count[i] = 0;
for(i = 0; i < n; i++) count[ array[i] - min ]++;
for(i = min, z = 0; i <= max; i++) {
for(j = 0; j < count[i - min]; j++) {
array[z++] = i;
}
}
free(count);
}