为了账号安全,请及时绑定邮箱和手机立即绑定

有没有大神能解释下这是为什么

有没有大神能解释下这是为什么

qq_82年的彬锅锅_03446807 2016-07-25 11:54:15
package com.chen;public class Demo{ public static void main(String[] args){ int arr[]={1,6,9,-15,16,-6}; Select s=new Select(); s.sort(arr); }}class Select{ int temp=0; public void sort(int arr[]){ for(int j=0;j<arr.length-1;j++){ int min=arr[j]; int minIndex=j; for(int k=j+1;k<arr.length;k++){                              //在选择排序法中,下面的arr[j]为什么不行,而arr[minIndex]或者min可以? if(arr[j]>arr[k]){ min=arr[k]; minIndex=k; } } temp=arr[j]; arr[j]=arr[minIndex]; arr[minIndex]=temp; } for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); } }}
查看完整描述

1 回答

?
不偏不易

TA贡献96条经验 获得超118个赞

你的代码有问题。

  1. 提问时有代码的,请用代码格式,编辑框左上角选择。

  2. if条件有问题,原来是arr[j]>arr[k],代表0和1比,取小的,当2和3比时3小,所以取-15,但是后面4和5比,-6小,所以又取了-6,本来应该是取最小值和下标,由于条件有问题,导致出错。

    应该改为if (min > arr[k]) {},循环时有值比min小的,就更新min和下标minIndex

  3. 代码如下。

	public void sort(int arr[]) {
		for (int j = 0; j < arr.length - 1; j++) {
			int min = arr[j];
			int minIndex = j;
			for (int k = j + 1; k < arr.length; k++) {
				// 在选择排序法中,下面的arr[j]为什么不行,而arr[minIndex]或者min可以?
				if (min > arr[k]) {
					min = arr[k];
					minIndex = k;
					
					
				}
			}
			temp = arr[j];
			arr[j] = arr[minIndex];
			arr[minIndex] = temp;
			
		}


查看完整回答
反对 回复 2016-07-25
  • 1 回答
  • 0 关注
  • 1147 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信