-1

私は Java の初心者で、現在 Java プログラミング入門という本を読んでいます。276 ページに、配列での選択ソートの例があります。私はここに座って何時間もそれを解決しようとしましたが、理解できません.このコードが配列を昇順でソートしていることは理解していますが、コードのさまざまな部分が何であるかを誰かがより詳細に説明できればありがたいです.正確にやっています。

    double[] list = { 1, 9, 4.5, 6.6, 5.7, -4.5 };
    SelectionSort.selectionSort(list);

    public class SelectionSort {

        public static void selectionSort(double[] list) {
            for (int i = 0; i < list.length - 1; i++) {

                double currentMin = list[i];
                int currentMinIndex = i;

                for (int j = i + 1; j < list.length; j++) {
                    if (currentMin > list[j]) {
                        currentMin = list[j];
                        currentMinIndex = j;

                    }
                }

                if (currentMinIndex != i) {
                    list[currentMinIndex] = list[i];
                    list[i] = currentMin;

                }
            }
        }
    }
4

2 に答える 2

8

選択ソートのウィキペディアのエントリは、探しているものかもしれません。コードには、プロセスを説明するコメントがあります。基本的に、Selection の並べ替えは配列を反復処理し、最小値を追跡します。その前に見つかった最小値よりも小さい新しい値が見つかった場合、2 つの値が交換されます。

/* a[0] to a[n-1] is the array to sort */
int i,j;
int iMin;

/* advance the position through the entire array */
/*   (could do j < n-1 because single element is also min element) */
for (j = 0; j < n-1; j++) {
    /* find the min element in the unsorted a[j .. n-1] */

    /* assume the min is the first element */
    iMin = j;
    /* test against elements after j to find the smallest */
    for ( i = j+1; i < n; i++) {
        /* if this element is less, then it is the new minimum */  
        if (a[i] < a[iMin]) {
            /* found new minimum; remember its index */
            iMin = i;
        }
    }

    /* iMin is the index of the minimum element. Swap it with the current position */
    if ( iMin != j ) {
        swap(a[j], a[iMin]);
    }
}
于 2013-01-04T20:04:55.040 に答える
2

セレクションソートアルゴリズムです。最小数を見つけて一番上に置き、それよりも小さい数が見つかった場合はそれを一番上に置き、リスト全体が最小から最大にソートされるまでそれを続けます。詳細: http://en.wikipedia.org/wiki/Selection_sort

于 2013-01-04T20:05:07.923 に答える