小白学アルゴリズム2.8——カウントソート
2539 ワード
小白学アルゴリズム2.8——カウントソート
ラベル:白白学アルゴリズム
1.カウントソートアルゴリズム
カウントソートは場合によっては比較的速いソートアルゴリズムであり,時間的複雑度はO(N)である.比較に基づくソートアルゴリズムは時間的複雑度が最も低いのがO(NlogN+K)であるため,カウントソートは非比較に基づくアルゴリズムである.カウントソートの使用条件の制限は比較的多く、ソートされる配列について初歩的な理解が必要である.例えば、要求されるソートデータは一般的に整数であり、ソートされる配列の最大値と最小値の差は大きすぎるべきではない.カウントソートは、年齢や身長などのデータをソートするためによく使用されます.
カウントソートの考え方は,データの出現回数に応じてソートすることである.カウントソートは、典型的には空間的に時間を交換するアルゴリズムであり、カウントソートには補助配列
2.カウントソート実装
3.まとめプログラムは、並べ替えられる配列の最小値minを見つけるなど、最適化を継続することができ、補助配列のサイズはmax-min+1であり、空間の複雑さを低減することができ、負の数の並べ替え を行うことができる.カウントソートは安定ソートであるが、本稿のコードは体現できない.安定したカウントソートを実現するには3番目の補助配列が必要である場合、具体的なアルゴリズムは白学アルゴリズム2.9-基数ソート を参照することができる.
ラベル:白白学アルゴリズム
1.カウントソートアルゴリズム
カウントソートは場合によっては比較的速いソートアルゴリズムであり,時間的複雑度はO(N)である.比較に基づくソートアルゴリズムは時間的複雑度が最も低いのがO(NlogN+K)であるため,カウントソートは非比較に基づくアルゴリズムである.カウントソートの使用条件の制限は比較的多く、ソートされる配列について初歩的な理解が必要である.例えば、要求されるソートデータは一般的に整数であり、ソートされる配列の最大値と最小値の差は大きすぎるべきではない.カウントソートは、年齢や身長などのデータをソートするためによく使用されます.
カウントソートの考え方は,データの出現回数に応じてソートすることである.カウントソートは、典型的には空間的に時間を交換するアルゴリズムであり、カウントソートには補助配列
b[max+1]
が必要であり、max
はソートされる配列の中で最大の数値を表す.並べ替えられる配列a[n]
を巡回し、a[n]
の各数値についてb[a[i]]++
の動作を行うことで、各数a[i]
が出現した回数を記録し、配列b[max+1]
を巡回し、左から右への出力値が0
でない要素を下付きにすればよい.2.カウントソート実装
void countingSort(int* a, int n)
{
int i, j;//i a[n] ,j b[max+1]
//find max
int max = a[0];
for (i=1; i<n; i++)
if (max < a[i]) max = a[i];
//initialize b[max+1], 0
int* b = new int[max+1];
for (j=0; j<max+1; j++)
b[j] = 0;
//counting
for (i=0; i<n; i++)
b[a[i]]++;
//output
for (i=0, j=0; j<max+1; j++)
{
while (b[j]!=0)
{
a[i++] = j;
b[j] = b[j] - 1;
}
}
delete []b;
}
3.まとめ