看 c.biancheng.net 给的关于选择排序的例程,有个小问题:
1 int[] number = {13,15,24,99,4,1};
2 String end = "\n";
3 int index;
4 for (int i = 1;i < number.length;i++) {
5 index = 0;
6 for(int j = 1;j <= number.length-i;j++) {
7 if (number[j] > number[index]) {
8 index = j; // 查找最大值
9 }
10 }
11 end = number[index] + " " + end; // 定位已排好的数组元素
12 int temp = number[number.length-i];
13 number[number.length-1] = number[index];
14 number[index] = temp;
15 System.out.print("【");
16 for (int j = 0;j < number.length-i;j++) {
17 System.out.print(number[j]+" ");
18 }
19 System.out.print("】"+end);
}
问题就在第13行,为什么是 number[number.length - 1] ?中括号里为什么是 -1 而不是 - i ?更奇怪的是,两种情况下运行得到的结果都是正确的……这是为什么呀?
Thanks!
字段代码的作用是,最后一个元素与index位置的元素进行数据交换,所以不能用i
int temp = number[number.length-1];
13 number[number.length-1] = number[index];
14 number[index] = temp;
完整选择排序例子,可以参考一下:
package T5;
public class SelectiontSort {
int a[];
public SelectiontSort() {
a = new int[]{8,19,2,3,100,99,1000,888,-1,0};
}
public SelectiontSort(int a[]) {
this.a = a;
}
//返回从开始位置找到的最小值的下标
public int getMinIndex(int start){
int index=start;
int min = a[start];
for(int i=start;i<a.length;i++){
if(min>a[i]){
min=a[i];
index = i;
}
}
return index;
}
//选择排序
public void selectionSort(){
for(int i=0;i<a.length;i++){
int index = getMinIndex(i);
if(index !=i){
int tmp = a[i];
a[i]=a[index];
a[index]=tmp;
}
}
}
public void print(){
for(int i=0;i<a.length;i++){
System.out.print(a[i]+"\t");
}
System.out.println("");
}
public static void main(String[] args) {
SelectiontSort sort = new SelectiontSort();
System.out.println("排序前顺序如下:");
sort.print();
System.out.println("======================");
sort.selectionSort();
sort.print();
}
}