一.原理

  1.1.动态演示图

  

  1.2.演示图讲解

  选择排序对数组进行遍历,获取数组中最小值的角标,若当前遍历的角标与最小值的角标不同,就将对应的角标值进行交换。

  1.3.数据演示

  原始数组:8 4 7 10 6 5 4 8

  第一次排序:4 8 7 10 6 5 4 8

  第二次排序:4 4 7 10 6 5 8 8

  ....

 

二.代码实现

public class ArraySortUtils {

    /**
     * 返回数组的字符串
     * @param array
     * @return
     */
    public static String arrayToString(int[] array){
        StringBuilder sb = new StringBuilder("[");
        for (int i = 0; i < array.length; i++) {
            if( i != (array.length - 1)){
                sb.append(array[i] + ",");
            }else{
                sb.append(array[i] + "]");
            }
        }
        return sb.toString();
    }


    /**
     * 选择排序
     * @param array
     */
    public static void selectSort(int[] array){

        //遍历数组
        for(int i = 0; i < array.length; i++){
            //默认最小角标为当前遍历元素角标
            int min = i;
            //获取到数据最小的角标
            for(int j = i + 1; j < array.length; j++){
                if(array[min] > array[j]){
                    min = j;
                }
            }
            //判断最小角标与当前角标是否相同,若不相同就进行交换元素
            if(min != i){
                int temp = array[min];
                array[min] = array[i];
                array[i] = temp;
            }

            System.out.println("第" + (i+1) + "次排序结果: " + arrayToString(array));
        }
    }
}

 

三.演示结果

public class ArraySortUtilsDemo {

    public static void main(String[] args) {
        //4 8 7 10 6 5 4 8
        //4 4 7 10 6 5 8 8
        int[] array = new int[]{8,4,7,10,6,5,4,8};
        System.out.println("排序前:" + ArraySortUtils.arrayToString(array));
        //ArraySortUtils.bubbleSort(array);
        //ArraySortUtils.quickSort(array);
        //ArraySortUtils.insertSort(array);
        //ArraySortUtils.shellSort(array);
        ArraySortUtils.selectSort(array);
        System.out.println("排序后:" + ArraySortUtils.arrayToString(array));
    }
}

演示结果:

排序前:[8,4,7,10,6,5,4,8]
第1次排序结果: [4,8,7,10,6,5,4,8]
第2次排序结果: [4,4,7,10,6,5,8,8]
第3次排序结果: [4,4,5,10,6,7,8,8]
第4次排序结果: [4,4,5,6,10,7,8,8]
第5次排序结果: [4,4,5,6,7,10,8,8]
第6次排序结果: [4,4,5,6,7,8,10,8]
第7次排序结果: [4,4,5,6,7,8,8,10]
第8次排序结果: [4,4,5,6,7,8,8,10]
排序后:[4,4,5,6,7,8,8,10]

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!