首页 新闻 会员 周边 捐助

关于选择排序法中判断最小值疑问

0
悬赏园豆:10 [已解决问题] 解决于 2016-07-29 12:22

//选择排序法

public class A0805 {
 public static void main(String[] args) {
  //数组
  int arr[] ={6,10,9,-1,-10,100,15};  
  //创建对象
  Select select = new Select();
  select.sort(arr);
  //输出最后结果
  for(int i=0;i<arr.length;i++){
   System.out.print(arr[i]+" ");
  }
 }
}

class Select{
 public void sort(int arr[]){
    int temp=0;
  //两层for循环
  //第一层定义一个int min常量接收for循环中arr数组的第一个值,且记录下标,其实就是j
  //第二层循环用来比对前一个循环j+1 下标位的数值,若前者小于后者
  for(int j=0;j<arr.length;j++){
   int min=arr[j];
   int minIndex=j;
   for(int k=j+1;k<arr.length;k++){
    if(min>arr[k]){
     //修改最小
     min=arr[k];
     minIndex=k;
    }
   }
   //档退出int k的for 循环后就找到了该数组中的最小值
   temp=arr[j];
   //arr[j]=min;
   arr[j]=arr[minIndex];
   arr[minIndex]=temp;
  }
 }
}

根据选择排序法数组会依次通过下标位 0-1  0-2  0-3 比较 ,只是我不懂为什么内层for循环后min的值就是最小值。其中如何判断的望给位大神给讲讲,我脑子笨想不通。

李成龙1991的主页 李成龙1991 | 初学一级 | 园豆:79
提问于:2014-08-05 15:35
< >
分享
最佳答案
0

算法里是求从大到小排序,从小到大排序应该是 if(min > arr[k]){}

内层for循环后min的值就是最小值,并不是这样的!

仔细想想,其实这算法就是将数组不断切割一个单位并保证每次切割将最小的值排除出去。

注释里写的: //档退出int k的for 循环后就找到了该数组中的最小值

该数组 的意思就是当前数组的意思。

第一次外循环结束后,数据就由原数组 Arr[length] -> Arr[length-1]

收获园豆:10
Moral | 菜鸟二级 |园豆:236 | 2014-08-05 17:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册