配列を昇順で並べ替える必要があり、時間の複雑さはO(n)でなければなりません。私は基数ソートを使用しており、それは十分に速くはありません。どのように私のコードをより速くすることができる任意のアイデアですか?ここでは、次のとおりです。Cでスロー基数ソート
void radix(int *a, int n) {
int i;
int sorted[n];
int number = 1;
int biggestNumber = -1;
for(i = 0; i < n; i++){
if(a[i] > biggestNumber)
biggestNumber = a[i]; }
while (biggestNumber/number > 0){
int bucket[10] = { 0 };
for (i = 0; i < n; i++)
bucket[(a[i]/number) % 10]++;
for (i = 1; i < 10; i++)
bucket[i] += bucket[i - 1];
for (i = n - 1; i >= 0; i--)
sorted[--bucket[(a[i]/number) % 10]] = a[i];
for (i = 0; i < n; i++)
a[i] = sorted[i];
number*= 10; } }
機能は機能しますか?それでは[Code Review](http://codereview.stackexchange.com/tour)に投稿してください。 –
既存のコードをスピードアップする方法や、より効率的なソートアルゴリズムを尋ねていますか? –
「十分に速くない」とはどういう意味ですか?それは時間制限付きのいくつかのオンライントレーニングのようなものですか、あるいはどのように「十分に速く」を定義していますか? – hyde