java选择排序推演过程
选择排序推演过程
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.选择排序
根据: 和
可知:
-
可以快速找到(指定或者)下一位最大值,并且交换位置 遍历一次可以找到一个最大值,并且这个最大值只移动一次 每次遍历都会有一个最大值放在上一个最大值后面
推测
-
多次循环可以依次将下一个最大值,放在上一个最大值的后面
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; } }