1

困ったことがあります。クイック ソート アルゴリズムを実装しましたが、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;
}

編集: テスト プログラムでは、最初にランダムに生成された配列をテキスト ファイルに出力し、次に並べ替えられた配列を別のテキスト ファイルに出力していることに言及する必要があります。したがって、実行速度は確かに遅いですが、それは問題ではありません。問題は、クイック ソートの実行速度が他のものよりもかなり遅いことです。

4

2 に答える 2