3

まず第一に、C++ に関する同様の質問を見たことがありますが、よく理解できませんでした。さらに、私の質問は Java に関するものです。

基本的に、解析された配列で SelectionSort と BubbleSort を使用できる 2 つのメソッドをコーディングしました。メソッドが正しく機能していると思いますが (テストを実行し、すべて昇順で番号を並べ替えました)、比較と数値スワップの数を正しくカウントしています。誰かが以下の私のコードをテストしてフィードバックを提供してくれたら、とても感謝しています。

注: Java プロジェクト ファイルを圧縮して、必要に応じて誰にでも送信できます。

バブルソート法:

public String bubbleSort(int[] numbers)
    {
        System.out.println("******|Bubble Sort|******");
        StringBuilder originalArray = new StringBuilder();

        for(int i = 0; i <= numbers.length - 1; i++)
        {
            originalArray.append(numbers[i] + " ");
        }
        System.out.println("Original array: " + originalArray);
        int temp; // temporary variable

        //Set boolean variable to true, 
        //to allow the first pass.
        boolean pass = true;

        int comparisons = 0;
        int swaps = 0;

        //While a pass can be made, 
        while(pass)
        {
            //Set the boolean value to false, 
            //indicating a number swap could 
            //be made.
            pass = false;

            for(int i = 0; i < numbers.length - 1; i++)
            {
                //increment the number of comparisons by 1.
                comparisons++;
                if(numbers[i] > numbers[i+1])
                {
                    temp = numbers[i];
                    numbers[i] = numbers[i + 1];
                    numbers[i+1] = temp;

                    //increment the amount of swaps made by 1, 
                    //to put numbers in correct order.
                    swaps++;
                    pass = true;
                }
            }
        }

        //Create a StringBuilder object - to hold 
        //the output of sorted numbers.
        StringBuilder sb = new StringBuilder();

        //Loop through the now sorted array - appending 
        //each subsequent number in the array to the 
        //StringBuilder object.
        for(int i = 0; i < numbers.length; i++)
        {
            sb.append(numbers[i] + " ");
        }

        //Return the final results of the sorted array.
        return "Sorted Array (asc): " + sb.toString() + "\nComparisons made: " + comparisons 
                + "\nSwaps made: " + swaps;
    }

SelectionSort メソッド

public String selectionSort(int[] numbers)
    {
        System.out.println("******|Selection Sort|******");
        StringBuilder originalArray = new StringBuilder();

        int comparisons = 0;
        int swaps = 0;

        for(int i = 0; i <= numbers.length - 1; i++)
        {
            originalArray.append(numbers[i] + " ");
        }
        System.out.println("Original array: " + originalArray);

        //Declare variable to hold first element
        int first;

        //declare temporary variable, to be used in 
        //swapping integers.
        int temp;

        for(int x = numbers.length - 1; x > 0; x--)
        {
            first = 0;
            comparisons++;
            for(int y = 1; y <= x; y++)
            {
                //comparisons++;
                if(numbers[y] > numbers[first])
                {
                    first = y;
                    //comparisons++;
                    swaps++;
                }
                temp = numbers[first];
                numbers[first] = numbers[x];
                numbers[x] = temp;
                //swaps++;
            }
        }

        //Create a StringBuilder object - to hold 
        //the output of sorted numbers.
        StringBuilder sb = new StringBuilder();

        //Loop through the now sorted array - appending 
        //each subsequent number in the array to the 
        //StringBuilder object.
        for(int i = 0; i < numbers.length; i++)
        {
            sb.append(numbers[i] + " ");
        }

        //Return the final results of the sorted array.
        return "Sorted Array (asc): " + sb.toString() + "\nComparisons made: " + comparisons 
                + "\nSwaps made: " + swaps;
    }
4

1 に答える 1

5

バブルソートの場合:

キー比較 -> (n*(n-1))/2

アイテムの割り当て (スワップ) -> 3*(n-1)

選択ソートの場合:

キー比較 -> (n*(n-1))/2 (バブルと同じ)

アイテムの割り当て (スワップ) -> (n*(n-1))/4

( nは配列サイズの数であることに注意してください)

于 2014-12-05T17:37:56.970 に答える