选择排序

    选择排序一共有数组大小的 -1 轮排序,每次找到当前这一轮元素的最小值,并且得到其下标,然后交换。

    时间复杂度O(n^2)。

例:101,34,55,32,48,49  (从小到大的顺序)

第一轮:32,34,55,101,48,49     (选取第一个数101为基准<当做最小值>,并且将当前的下标记为0,将基准后面的数与基准作比较,找到最小的数,更新最小数的值以及下标,将其与开始的基准交换位置)

第二轮:32,34,55,101,48,49       (选取第二个数,即34为基准,后面操作同上)

第三轮:32,34,48,101,55,49

第四轮:32,34,48,49,55,101

第五轮:32,34,48,49,55,101

   具体代码如下:

import java.util.Arrays;

public class SelectSort {
    public static void main(String[] args) {
        int[] arr = {101,34,55,32,48,49};
        selectSort(arr);
    }
    //选择排序
    public static void selectSort(int[] arr){
        for (int j = 0; j < arr.length-1; j++) {
        int minIdex = j; //最小值索引
        int min = arr[j]; //最小值
        for (int i = j+1; i < arr.length; i++) {
            if(min > arr[i]){
                //更新最小值和索引
                min = arr[i];
                minIdex = i;
            }
        }
        if(minIdex !=j){ //说明最小值和索引更新了,进行交换,否则当前基准为最小值,不进行交换
        arr[minIdex] = arr[j];
        arr[j] = min;
        }
    }
    System.out.println("排序后 :"+Arrays.toString(arr));
    }
}

运行结果:

 

原文地址:https://www.cnblogs.com/128-cdy/p/12181326.html