この特定のクイックソートアルゴリズムで比較数を見つける

ダビ:

クイックソートのアルゴリズムがあり、その中に比較の数を返したいのですが、指定されたアルゴリズムを何も作成できません。比較フォームのgetCompares()関数を返す必要があります。私は多くの場所でオンラインで確認しましたが、これに対する適切な解決策を見つけていません。いいえ。サイズが100のソート済みデータの比較の結果は、結果として488になるはずです。

/**
 * Quicksort algorithm.
 * @param a an array of Comparable items.
 */

public static void QuickSort( Comparable [ ] a )

{
    quicksort( a, 0, a.length - 1 );
}

private static final int CUTOFF = 10;

/**
 * Method to swap to elements in an array.
 * @param a an array of objects.
 * @param index1 the index of the first object.
 * @param index2 the index of the second object.
 */
public static final void swapReferences( Object [ ] a, int index1, int index2 )
{
    Object tmp = a[ index1 ];
    a[ index1 ] = a[ index2 ];
    a[ index2 ] = tmp;
}

/**
 * Internal quicksort method that makes recursive calls.
 * Uses median-of-three partitioning and a cutoff of 10.
 * @param a an array of Comparable items.
 * @param low the left-most index of the subarray.
 * @param high the right-most index of the subarray.
 */
private static void quicksort( Comparable [ ] a, int low, int high )
{
    if( low + CUTOFF > high )
        insertionSort( a, low, high );
    else
    {
            // Sort low, middle, high
        int middle = ( low + high ) / 2;
        if( a[ middle ].compareTo( a[ low ] ) < 0 )
            swapReferences( a, low, middle );
        if( a[ high ].compareTo( a[ low ] ) < 0 )
            swapReferences( a, low, high );
        if( a[ high ].compareTo( a[ middle ] ) < 0 )
            swapReferences( a, middle, high );

            // Place pivot at position high - 1
        swapReferences( a, middle, high - 1 );
        Comparable pivot = a[ high - 1 ];

            // Begin partitioning
        int i, j;
        for( i = low, j = high - 1; ; )
        {
            while( a[ ++i ].compareTo( pivot ) < 0 )
                ;
            while( pivot.compareTo( a[ --j ] ) < 0 )
                ;
            if( i >= j )
                break;
            swapReferences( a, i, j );
        }

            // Restore pivot
        swapReferences( a, i, high - 1 );

        quicksort( a, low, i - 1 );    // Sort small elements
        quicksort( a, i + 1, high );   // Sort large elements
    }
}

/**
 * Internal insertion sort routine for subarrays
 * that is used by quicksort.
 * @param a an array of Comparable items.
 * @param low the left-most index of the subarray.
 * @param n the number of items to sort.
 */
private static void insertionSort( Comparable [ ] a, int low, int high )
{
    for( int p = low + 1; p <= high; p++ )
    {
        Comparable tmp = a[ p ];
        int j;

        for( j = p; j > low && tmp.compareTo( a[ j - 1 ] ) < 0; j-- )
            a[ j ] = a[ j - 1 ];
        a[ j ] = tmp;
    }
}
スプリンター:

これを実現する最も簡単な方法Comparableは、呼び出された回数をカウントする2つのオブジェクトを比較する内部メソッドを作成し、すべてのcompareTo呼び出しをそのメソッドの呼び出しに置き換えることです

private int comparisons = 0;

private int compare(Comparable<?> obj1, Comparable<?> obj2) {
    comparisons++;
    return obj1.compareTo(obj2);
}

その後のような表現に置き換えるtmp.compareTo(a[j-1])compare(tmp, a[j-1])

あなたのgetCompares方法を返しますcomparisons

考慮すべきその他のヒント:

理想的には、静的メソッドと変数を使用しないでください。QuickSort使用する前にインスタンス化する必要があるクラスを作成します。

生の型(Comparableコード内など)を使用しないことをお勧めします。最近のIDEのほとんどは、これの危険性について正しく警告しています。(上記のように)ワイルドカードを使用するか、実際にはQuickSortクラスにジェネリック型を実際に追加します

class QuickSort<T extends Comparable<T>> {
    public void sort(T[] array) { ... }
}

QuickSort<Integer> intSorter = new QuickSort<>();
int[] array = {5, 8, 2};
intSorter.sort(array);

これにより、互換性のない型を混在させていないことをコンパイル時にチェックできます。現在のraw型では、Javaはそれを行うことができません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

以下の新しいクイックソートアルゴリズムの正確な時間計算量と空間計算量を見つける方法

分類Dev

ソーシャルネットワークで密接な関係を見つけるためのアルゴリズム(グラフ理論)

分類Dev

ソーシャルネットワークで「発行者」を見つけるためのO(n)アルゴリズム

分類Dev

任意の長さの配列で拡張ユークリッドアルゴリズムを介してベズー係数を見つける

分類Dev

Z(n)、拡張ユークリッドアルゴリズムでxの逆数を見つける

分類Dev

指定された範囲内で差がある直列の2つの数値のインデックスを見つけるアルゴリズム

分類Dev

検索リストの「最良のトピック」を見つけるためのアルゴリズム-python

分類Dev

2つのアルゴリズムの効率比較:行方向/列方向にソートされた行列内の負の整数の数を見つけます

分類Dev

クイックソートアルゴリズムでのソート

分類Dev

配列内のk個の最小数のインデックスを見つけるアルゴリズム

分類Dev

2D配列のピークを見つけるアルゴリズム

分類Dev

大きなグラフで2つのノード間の最短経路を見つけるダイクストラアルゴリズム?

分類Dev

アルゴリズムの問題:有向グラフで最長の基本サイクルを見つける

分類Dev

クイックソートアルゴリズムでリストを変更することの副作用が悪いのはなぜですか?

分類Dev

ユークリッドのアルゴリズムを使用してGCF / GCDを見つける方法は?

分類Dev

テーブル内で1対多を見つけるためのクエリ/アルゴリズム

分類Dev

最小ボトルネックパスを見つけるための線形時間アルゴリズム

分類Dev

クイックソートアルゴリズムの実装

分類Dev

数の最大の素数を見つけるアルゴリズム

分類Dev

アルゴリズムの命令の数を見つける

分類Dev

正の数の範囲でバイナリ表現の1の数を見つけるアルゴリズム

分類Dev

cでのクイックソートアルゴリズムの実装

分類Dev

暫定サイズのASCIIアートプログラムの空白アルゴリズムを見つける

分類Dev

DFS アルゴリズムを使用して、マトリックス内の隣接する数値の最大領域を見つける

分類Dev

k番目に小さい数を見つけるためのクイック選択アルゴリズムの実装

分類Dev

2つのポインターを使用したクイックソートアルゴリズム

分類Dev

2つのポインターを使用したクイックソートアルゴリズム

分類Dev

クイックソートアルゴリズムで出力を取得する方法

分類Dev

オブジェクトの複数のグループの最適な一致を見つけるためのアルゴリズム

Related 関連記事

  1. 1

    以下の新しいクイックソートアルゴリズムの正確な時間計算量と空間計算量を見つける方法

  2. 2

    ソーシャルネットワークで密接な関係を見つけるためのアルゴリズム(グラフ理論)

  3. 3

    ソーシャルネットワークで「発行者」を見つけるためのO(n)アルゴリズム

  4. 4

    任意の長さの配列で拡張ユークリッドアルゴリズムを介してベズー係数を見つける

  5. 5

    Z(n)、拡張ユークリッドアルゴリズムでxの逆数を見つける

  6. 6

    指定された範囲内で差がある直列の2つの数値のインデックスを見つけるアルゴリズム

  7. 7

    検索リストの「最良のトピック」を見つけるためのアルゴリズム-python

  8. 8

    2つのアルゴリズムの効率比較:行方向/列方向にソートされた行列内の負の整数の数を見つけます

  9. 9

    クイックソートアルゴリズムでのソート

  10. 10

    配列内のk個の最小数のインデックスを見つけるアルゴリズム

  11. 11

    2D配列のピークを見つけるアルゴリズム

  12. 12

    大きなグラフで2つのノード間の最短経路を見つけるダイクストラアルゴリズム?

  13. 13

    アルゴリズムの問題:有向グラフで最長の基本サイクルを見つける

  14. 14

    クイックソートアルゴリズムでリストを変更することの副作用が悪いのはなぜですか?

  15. 15

    ユークリッドのアルゴリズムを使用してGCF / GCDを見つける方法は?

  16. 16

    テーブル内で1対多を見つけるためのクエリ/アルゴリズム

  17. 17

    最小ボトルネックパスを見つけるための線形時間アルゴリズム

  18. 18

    クイックソートアルゴリズムの実装

  19. 19

    数の最大の素数を見つけるアルゴリズム

  20. 20

    アルゴリズムの命令の数を見つける

  21. 21

    正の数の範囲でバイナリ表現の1の数を見つけるアルゴリズム

  22. 22

    cでのクイックソートアルゴリズムの実装

  23. 23

    暫定サイズのASCIIアートプログラムの空白アルゴリズムを見つける

  24. 24

    DFS アルゴリズムを使用して、マトリックス内の隣接する数値の最大領域を見つける

  25. 25

    k番目に小さい数を見つけるためのクイック選択アルゴリズムの実装

  26. 26

    2つのポインターを使用したクイックソートアルゴリズム

  27. 27

    2つのポインターを使用したクイックソートアルゴリズム

  28. 28

    クイックソートアルゴリズムで出力を取得する方法

  29. 29

    オブジェクトの複数のグループの最適な一致を見つけるためのアルゴリズム

ホットタグ

アーカイブ