选择排序

65 阅读2分钟

选择排序

  • public static void selectSort(int[] arr) {...}:这是一个静态方法定义,接收一个整数数组参数 arr
  • 在 selectSort 方法中,使用了两个嵌套的 for 循环:
  • 外层循环用于控制排序的轮数。从数组的第一个元素开始,直到数组的倒数第二个元素,因为当只剩下一个元素时,它自然就是最大的,不需要再排序。
  • 内层循环用于在每次外层循环中,从当前元素的下一个位置开始,遍历数组的其余部分,找到最小的元素。
  • 在内层循环中,min 变量用来记录当前找到的最小元素的索引。如果找到一个比当前 min 索引位置的元素更小的元素,就更新 min 为新的最小值的索引。
  • 每次内层循环结束后,找到了当前排序范围(从当前位置到数组末尾)内的最小值的索引。然后将最小值与当前位置(由外层循环索引 i 表示)的元素交换。

整个算法通过多次迭代,每次将未排序部分中的最小元素放到已排序部分的末尾,从而实现整个数组的排序。

/**
 * 选择排序
 */
public class SelectSort {


    public static void main(String[] args) {

        int[] arr = new int[]{3, 5, 22, 111, 5};
        selectSort(arr);
    }


    /**
     * 算法思路
     * <p>
     * 数组长度为 n
     * 0到n-1中找出最小数的下标min,arr[min]和arr[0]交换,第一次交换后数组中最小的数在数组的0下标的位置
     * 1到n-1中找出最小数的下标min,arr[min]和arr[1]交换,第二次交换后数组中剩下数的最小的数在数组的1下标的位置
     * ......
     * 以此类推
     */
    public static void selectSort(int[] arr) {

        for (int i = 0; i < arr.length - 1; i++) {

            //找出数组中的最小索引下标
            int min = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[min]) {
                    min = j;
                }
            }
            //交换数据
            int temp = arr[min];
            arr[min] = arr[i];
            arr[i] = temp;


        }


    }

}