08、数据结构与算法-排序算法-选择排序-笔记整理

选择排序思想

假设有一个数组,int[] arr = {2, 7, -1, 10, 19};

1、 先假如数组第一个元素2为最小值,依次与剩下的元素进行比较,如果发现有元素比这个值更小就刷新最小值,第一轮结束后会找到本轮的最小值,然后让这个最小值与元素2进行交换;
2、 第一个元素最小值确定之后,再假设第二个元素7为最小值,依次与-1,10,19如果中间发现有比7小的就刷新最小值,直到遍历完这个数组,让本轮最小值的元素与元素7进行交换;
3、 从第三个元素开始,发现依次找最小值,比较…第四第五个元素同上;
4、 依次到倒数第二个元素确定之后结束;
注意事项:如果发现最小值就是自己就不要进行交换操作

代码思想

int[] arr = {
   
     2, 7, -1, 10, 19};
        //第1轮
        int minIndex = 0;
        int min = arr[0];
        for (int j = 0 + 1; j < arr.length; j++) {
   
     
            if (min > arr[j]) {
   
      //说明假定的最小值,并不是最小
                min = arr[j]; //重置min
                minIndex = j; //重置minIndex
            }
        }
        if (minIndex != 0) {
   
     //最小值如果是自己的话不进行交换
            arr[minIndex] = arr[0];
            arr[0] = min;
        }
        System.out.println(Arrays.toString(arr));

        //第2轮
        minIndex = 1;
        min = arr[1];
        for (int j = 1 + 1; j < arr.length; j++) {
   
     
            if (min > arr[j]) {
   
      // 说明假定的最小值,并不是最小
                min = arr[j]; // 重置min
                minIndex = j; // 重置minIndex
            }
        }
        if (minIndex != 1) {
   
     //最小值如果是自己的话不进行交换
            arr[minIndex] = arr[1];
            arr[1] = min;
        }

        System.out.println(Arrays.toString(arr));

        //第3轮
        minIndex = 2;
        min = arr[2];
        for (int j = 2 + 1; j < arr.length; j++) {
   
     
            if (min > arr[j]) {
   
      // 说明假定的最小值,并不是最小
                min = arr[j]; // 重置min
                minIndex = j; // 重置minIndex
            }
        }
        if (minIndex != 2) {
   
     //最小值如果是自己的话不进行交换
            arr[minIndex] = arr[2];
            arr[2] = min;
        }
        System.out.println(Arrays.toString(arr));

        //第4轮
        minIndex = 3;
        min = arr[3];
        for (int j = 3 + 1; j < arr.length; j++) {
   
     
            if (min > arr[j]) {
   
      // 说明假定的最小值,并不是最小
                min = arr[j]; // 重置min
                minIndex = j; // 重置minIndex
            }
        }
        if (minIndex != 3) {
   
     //最小值如果是自己的话不进行交换
            arr[minIndex] = arr[3];
            arr[3] = min;
        }
        System.out.println(Arrays.toString(arr));

最终版本

  int[] arr = {
   
     2, 7, -1, 10, 19};
        for (int i=0;i<arr.length-1;i++){
   
     
            int minIndex = i;
            int min = arr[i];
            for (int j = i + 1; j < arr.length; j++) {
   
     
                if (min > arr[j]) {
   
      // 说明假定的最小值,并不是最小
                    min = arr[j]; // 重置min
                    minIndex = j; // 重置minIndex
                }
            }
            if (minIndex != i) {
   
     //最小值如果是自己的话不进行交换
                arr[minIndex] = arr[i];
                arr[i] = min;
            }
            System.out.println(Arrays.toString(arr));
        }

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: