关于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 的修改可以传出去。


继续加油!:)

0
0

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程