Java数组的选择排序的条件如何写

文章详细分析了选择排序算法中,外层循环loop1为何以arr.length-1为终止条件,以及内层循环loop2为何以arr.length为结束条件。讨论了循环的逻辑和比较次数,解释了如何找到每轮的最小元素并与其在数组中的对应位置进行交换。
摘要由CSDN通过智能技术生成

选择排序

代码如下:

int[] arr = {9, 7, 5, 3, 1};
loop1: for(int i = 0; i < arr.length - 1; i++){//从0开始没错,为什么终止条件要arr.length - 1
	int minIndex = 0;
	loop2: for(int j = i + 1; j < arr.length; j++){//从i + 1开始也没问题,为什么终止条件变成arr.length
		if (arr[minIndex] > arr[j]){
			minIndex = j;//如果已获得的最小值下标,比下一个元素大,则把下一个元素的下标,赋予最小值下标
		}
	}
	//内层循环结束之后,获得最小值与第i个元素交换位置
	int temp = arr[minIndex];
	arr[minIndex] = arr[i];
	arr[i] = temp;
}
第一个疑问:外层循环 loop1 的终止条件为什么是 arr.length - 1 ?

1、首先最后一个元素的下标为 arr.length - 1,正常遍历所有元素,写 i < arr.length没错,相当于 i <= arr.length - 1,从 0 到 arr.length - 1,循环次数为 arr.length,5次

2、然后作为排序,外层循环是控制比较次数。第一轮是两两相比,找当前循环里最小的值。

两相比较的话,比较次数(比如两个人比较一次,三个人比较两次)总是比元素个数少1,相当于循环到倒数第二个元素,它的下标是,arr.length - 1 - 1

3、所以终止条件应该是 i <= arr.length - 1 - 1,相当于 i < arr.length - 1

然后找到每轮的最小元素,与每轮比较的第一个元素,交换位置

内层循环 loop2 的结束条件为什么是 arr.length ?

1、首先内层循环是控制比较的元素长度

j 从 每次外层循环开始的第二个元素开始,和第一个比较。每轮外层循环开始的第一个元素是arr[i],即下标为i,所以 j 理应从 i + 1 开始

2、然后每次循环都是遍历到最后一个元素为止,下标遍历到 arr.length - 1 结束。即 j 的最大值最终为 arr.length - 1,结束条件时 j <= arr.length - 1,相当于 j < arr.length。

换一种思路:

外层循环控制的是第一个元素,从0位开始,与后一个元素比较大小,后一个元素由内层循环控制;

即是两两比较,外层循环的下标最大值,只能为倒数第二个元素的下标,就是 arr.length - 1 - 1;

内层循环的最大值,是最后一个元素的下标,就是 arr.length - 1

只要找到规律,循环的起始条件和结束条件,是比较容易找到的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值