困ったことがあります。クイック ソート アルゴリズムを実装しましたが、30 個を超える要素を持つ整数の配列でテストすると、私の意見ではソートに時間がかかります。100 要素のクイック ソートよりも 10000 要素のほうが高速な選択ソート、挿入ソート、バブル ソートとは異なり、場合によっては 10 秒を超えることもあります。
これが私の解決策です。アドバイスをお願いします:)
void kvikSort(int a[], int l, int d) {
int i, k;
if (l >= d)
return;
k = l;
swap(&a[l], &a[(l + d) / 2]);
for (i = l + 1; i <= d; i++)
if (a[i] < a[l])
swap(&a[++k], &a[i]);
swap(&a[l], &a[k]);
kvikSort(a, 0, k-1);
kvikSort(a, k+1, d);
}
編集: Linux Mint 14 で GCC v 4.7.2 を使用しています。proc: intel core2duo e7400
編集:私の他のアルゴリズム:
void selectionSort(int a[], int n) {
int i, j, min;
for (i = 0; i < n - 1; i++) {
min = i;
for (j = i + 1; j < n; j++)
if (a[j] < a[min])
min = j;
if (min != i)
swap(&a[min], &a[i]);
}
}
void insertionSort(int a[], int n) {
int i, j;
for (i = 0; i < n - 1; i++)
for (j = i + 1; j > 0 && a[j] < a[j-1]; j--)
swap(&a[j], &a[j-1]);
}
void bubbleSort(int a[], int n) {
int i, j;
for (i = n - 1; i > 0; i--)
for (j = 0; j < i; j++)
if (a[j] > a[j+1])
swap(&a[j], &a[j+1]);
}
void swap(int *i, int *j) {
int tmp;
tmp = *i;
*i = *j;
*j = tmp;
}
編集: テスト プログラムでは、最初にランダムに生成された配列をテキスト ファイルに出力し、次に並べ替えられた配列を別のテキスト ファイルに出力していることに言及する必要があります。したがって、実行速度は確かに遅いですが、それは問題ではありません。問題は、クイック ソートの実行速度が他のものよりもかなり遅いことです。