选择排序,谈谈我发现的亮点

上实例

package demoarr;
//选择排序
/**
 * 我开始以为要循环取最小值,那不是直接就可以排序了吗,还用那么麻烦吗
 * 重点是最小值与循环到的位置的互换,保证了排在前面的最小后面的不重复
 * @author chengwei
 *
 */
public class ChooseSorting {
 public static void main(String[] args) {
  int[] arr= {3,2,9,7,6,8,1,13,76,34};
  int temp;//中间值
  
  for(int i=0;i<arr.length;i++) {
   int k=i;//为了不改变i,但能通过arr[k]改变arr[i]的值,实现arr[i]与arr[j]的比较
   for(int j=arr.length-1;j>i;j--) {
    if(arr[j]<arr[k]) {
     k=j;//k值改变以后,arr[k]值也会改变,也就是if条件会改变
    }
   }
   //最小值与arr[i]的互换,i是一直递增的,还是i前面数组的顺序已定,排后面的
   temp=arr[i];
   arr[i]=arr[k];
   arr[k]=temp;
  }
  /*
   * i=0: k=0;  当j=6;(arr[6]=1)<(arr[k]=3) k=6 j--....
   *        当j=5;(arr[5]=8)<(arr[k]=1)不成立,这时k=6,arr[k]已不同
   *    temp=arr[i]=3;arr[i]=arr[k]=arr[6]=1;arr[k]=arr[6]=3;
   * 数组变为{1,2,9,7,6,8,3,13,76,34};
   */
  for(int i=0;i<arr.length;i++) {
   System.out.println(arr[i]);
  }
 }
}

 注意到 if(arr[j]<arr[k]) {k=j;}里面的if里的判断条件会随着if语句执行结果改变

猜你喜欢

转载自www.cnblogs.com/dreamcheng/p/9650326.html
今日推荐