由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
}
}
这样,将数组传入到函数中,数组也会得到相应的修改了。
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
}
}
这样,将数组传入到函数中,数组也会得到相应的修改了。
相关文章推荐
- 浅析“强制类型转换”带来的性能分析及其解决方法
- 采用二级域名带来的问题及解决方法
- 扩展方法、接口和继承带来的有趣现象
- access改mdb为asp所带来的灾难 附mdb防下载方法
- Linux 同步方法剖析--由bluesleep带来的tip
- access改mdb为asp所带来的灾难 附mdb防下载方法
- 噪声带来的困扰以及解决方法---软件滤波
- asp.net下修改文件系统带来的副作用及其解决方法
- AppLocale安装方法,及带来的中文软件执行问题解决办法
- Sql 2005 带来的分页新方法
- 不要老是像一头“牛”——在解决问题方法上的启发
- 制造业中大规模生产方法带来的好处
- 电脑不能连接远程桌面方法(彻底解决因操作系统带来的问题)
- JQuery常用的方法 让我们看看这个小小的筐架能带来什么
- ASP.NET 未被授权访问所带来的问题的解决方法。
- 解决java网络编程IPv6带来的问题方法
- 浅析“强制类型转换”带来的性能分析及其解决方法
- VS2005不能新建智能设备项目的解决方法(非IE8带来的问题)
- 单向和双向沟通带来启发 推荐
- Qt3和Qt4版本差异带来的问题和解决方法