选择排序推演过程

选择排序推演过程

1. 找出数组中最大值和下角标为 0 的元素交换位置

思路:

一.先找出最大值
1.假设index为 0 ,下角标为 0 的元素就是最大值
2.遍历数组,用index依次和后续所有数据做比较
3.i 从1开始,自身和自身做比较没有意义
4.如果第一个元素小于第二个元素,说明第二个元素是较大值。赋值给index
5.用赋值后的index和第三个元素做比较,依次类推
6.遍历结束后,index就是最大值
二.交换位置
8.此种方法没有考虑极端情况,例如:0 位就是最大元素。加入限制貌似唯一的作用就是少循环一遍

		int[] arr = {0, 3, 5, 7, 9, 2, 4, 6, 8, 10};
		//存储最大值的下角标
        int index = 0;
        /*
        先找出最大值
         */
        for (int i = 1; i < arr.length; i++) {
            if (arr[index] < arr[i]) {
            //把每次判断的较大值传递给index
                index = i;
            }
        }
        //交换元素
        int tmp = arr[index];
        arr[index] = arr[0];
        arr[0] = tmp;

2.找出数组中剩余最大值和下标为1的元素交换位

思路:

1.继续操作上面已经被操作过的数组
2.当前0位已经是全数组最大值了,不参与下面操作
3.index从1位开始,假设1位是当前最大值,不与自身比较
4.变量 i 从 2 开始遍历
5.如果 arr [ index ] 小于 arr [ i ] ,说明第二个元素是较大值。赋值给index
6.依次类推
7.得到剩余的最大值
8.最后交换index和1的值

        //index从1位开始
        index = 1;

        //i 从 2 开始
        for (int i = 2; i < arr.length; i++) {
            if (arr[index] < arr[i]) {
                index = i;
            }
        }
        //交换位置
        tmp = arr[index];
        arr[index] = arr[1];
        arr[1] = tmp;
        System.out.println (Arrays.toString (arr));

3.选择排序

根据: 找出数组中最大值和下角标为 0 的元素交换位置 找出数组中剩余最大值和下标为1的元素交换位

可知:

  • 可以快速找到(指定或者)下一位最大值,并且交换位置
  • 遍历一次可以找到一个最大值,并且这个最大值只移动一次
  • 每次遍历都会有一个最大值放在上一个最大值后面

推测

  • 多次循环可以依次将下一个最大值,放在上一个最大值的后面

4.选择排序实现

代码方法(未优化)

private static void extracted1 (int[] arr) {
        //选择排序
        for (int i = 0; i < arr.length - 1; i++) {
            int index = i;
            for (int j = i + 1; j < arr.length; j++) {
            //判断indx是否小于j,是则赋值给index,正序倒序取决于小于还是小于
                if (arr[index] < arr[j]) {
                    index = j;
                }
            }
            int temp = arr[index];
            arr[index] = arr[i];
            arr[i] = temp;
        }
    }
posted @ 2023-02-23 20:27  ²º²º痕迹º  阅读(10)  评论(0编辑  收藏  举报