您的位置:首页 > 其它

由Insertion Sort中exch() 方法 带来的启发

2016-11-15 14:59 183 查看
原始的代码:

 package Week2;

public class Selection {
int[] a;

public Selection(int[] a) {
this.a = a;
}

public void sort() {
int N = a.length;
for(int i = 0; i < N;i++)
for(int j = i;j > 0;j--)
if(a[j] < a[j - 1])
exch(a[j], a[j - 1]);
else break;
}

private void exch(int i, int j) {
int temp = i;
i = j;
j = temp;
}

private void print() {
for(int i = 0;i < a.length;i++)
System.out.print(a[i] + " ");
System.out.println();
}

public static void main(String[] args) {
// TODO Auto-generated method stub
}

}
这样编写看起来没什么问题,运行之后却发现数组并尅有被重新排序。 其主要原因是因为exch() 方法, 并没有真正将数组中的元素调换位置。只是将数组中对应元素的值传给了 i 与 j , 而后将i 和  j  的值互换, 并没有对数组本身产生影响。
正确的代码:
package Week2;

public class Selection {
int[] a;

public Selection(int[] a) {
this.a = a;
}

public void sort() {
int N = a.length;
for(int i = 0; i < N;i++)
for(int j = i;j > 0;j--)
if(a[j] < a[j - 1])
exch(a,j, j - 1);
else break;
}

private void exch(int[] a, int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}

private void print() {
for(int i = 0;i < a.length;i++)
System.out.print(a[i] + " ");
System.out.println();
}

public static void main(String[] args) {
// TODO Auto-generated method stub
}

}
这样,将数组传入到函数中,数组也会得到相应的修改了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: