java的选择排序出现问题了

我自己先写的选择排序

 public static int[] Sort(int[] arr) {
        for(int i = 0; i< arr.length; i++){
            int index = i;
            for(int j = i + 1; j < arr.length; j++){
                if(arr[i] > arr[j])
                    index = j;
            }
            if(index != i){
                int temp = arr[i];
                arr[i] = arr[index];
                arr[index] = temp;
            }
        }

        return arr;
    }

然后定义数组

 int[] arr = {2,3,5,4,7,2,6};

打印出来的结果是:2 2 3 4 6 5 7
但是当把二层for循环中的if语句

 for(int j = i + 1; j < arr.length; j++){
                if(arr[i] > arr[j])
                    index = j;
            }

换成

 for(int j = i + 1; j < arr.length; j++){
                if(arr[index] > arr[j])
                    index = j;
            }

打印就是对的:2 2 3 4 5 6 7

这是为什么啊?按理index和i是相等的啊?

不相等啊,你第2层循环只要if语句执行了,就对Index值进行了修改的。。

选择排序的原理是将待排序列的最大或最小放在序列首端,你那第一个是将序列的最后一个比首位元素小的放在首端肯定是错的,比如一个序列 5 2 3 6 7 用你第一个方法排得到的结果会是3 2 5 6 7显然有问题,第二个是对的

在第二层循环的时候,你把 j 赋值给了index,当i=4的时候,第一种方法index=6,而第二种index=5,在这里就已经不想等了。index和 i 是不同的,因为你对index重新进行了赋值。

i=0: 2,3,5,4,7,2,6
i=1: 2,2,5,4,7,3,6
1=2: 2,2,3,4,7,5,6
i=3: 2,2,3,4,7,5,6
i=4: 2,2,3,4,6,5,7
下次循环的时候arr[5]=5去和arr[6]比较,这时的arr[4]=6就无法进入排序了

哦哦,明白了,谢谢各位。。。其实我应该debug一下的。。。