其他分享
首页 > 其他分享> > 选择排序

选择排序

作者:互联网

package class01;

/**
 * 选择排序
 */
//思路:n个数,n次循环(10个数就是10次循环),每次循环找出本轮的最小值,和本轮的第一个位置的数,交换。周而复始。直至该乱序数组有序。
public class Code02_SelectionSort {
    public static void main(String[] args) {
        int[] arr = {8, 6, 4, 5, 11, 3, 2, 7, 9, 7, 8};
        printArr(arr);
        selectSort(arr);
        printArr(arr);
    }

    public static void selectSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        int N = arr.length;
        //0~n-1范围上,做一堆事儿。
        //1~n-1范围上,做一堆事儿。
        //2~n-1范围上,做一堆事儿。
        //...
        //即:i~n-1范围上,做一堆事儿。得出外层循环。i从0开始,i<n,即i<=n-1。

        //所以一共是n次循环,第一次循环,找出在这个范围上的最小值的索引(使用的三元表达式),
        //让这个最小值(位置可能是第二个位置,可能在中间,也可能在最后一个位置),和本次循环的第一个位置(索引0)上的数,交换。此时第一个数不用管了,i就可以++了。
        //第二次循环,第三次循环...周而复始。
        for (int i = 0; i < N; i++) {
            int minValueIndex = i;
            for (int j = i + 1; j < N; j++) {//直接让i+1位置上的数,和最小值比较。
                //如果从第二个数(含)往后,有比最小值还小的,则更新最小值索引为j。否则最小值的索引minValueIndex还是它自己。
                minValueIndex = arr[j] < arr[minValueIndex] ? j : minValueIndex;
            }
            swap(arr, i, minValueIndex);//将最小值,和本轮循环的第一个位置的数,交换。
        }
    }

    public static void printArr(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

    public static void swap(int[] arr, int i, int j) {
        int t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
    }

}

 

标签:arr,一堆,int,选择,循环,排序,事儿,public
来源: https://www.cnblogs.com/TheFloorIsNotTooHot/p/16350362.html