关于swap交换
来源:2-1 选择排序法 - Selection Sort
qq_齐咸鱼_0
2020-05-26
public class SelectionSort {
public void sort(int[] arr){
for (int i = 0;i<arr.length;i++){
int minIndex = i; //不应该记录值 应该记录索引 值通过arr就可以找到了
for (int j = i;j<arr.length;j++){
if (arr[j]<arr[minIndex]){ //找出最小值 并且更新索引值
minIndex = j;
}
}
//将arr[i]和 arr[minIndex]进行交换
/*
int var = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = var;
*/
swap(arr[i],arr[minIndex]);
}
}
public void swap(int i ,int j){
int var = i;
i = j;
j = var;
}
}
bobo老师,您看一下我的swap函数,我觉得逻辑上交换的没有问题(多行注释中的代码排序测试成功了),但是最后测试没有交换成功。我看了老师写的java代码,我感觉我的没有问题呀。想请教一下老师swap的逻辑哪里出错了。谢谢bobo老师
写回答
1回答
-
liuyubobobo
2020-05-26
java 不能这么交换。因为在 swap 函数中,i 和 j 都是基本类型的参数,是传值,是传来的参数副本。在 swap 中对 i 和 j 交换了,传不出去。
注意我的 Java swap 函数:
private static void swap(int[] arr, int i, int j) { int t = arr[i]; arr[i] = arr[j]; arr[j] = t; }
需要把 arr 传进来。arr 是 int[] 对象的一个引用,是传引用,对 arr 的修改可以传出去。
继续加油!:)
00
相似问题