问题遇到的现象和发生背景
javaidea选择排序,每次遍历找到最大值和最小值,最大值放在最右边,最小值放在最左边,拥有begin,end,min,max四个下标
遇到的现象和发生背景,请写出第一个错误信息
选择排序每次循环都要找出最大值最小值,每次两次交换,我用了自己写的一个类里的方法交换数据
,这个交换方法写成通过第三者交换是可以让算法成功执行的.我用的对数器大数据量下检测出来的
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
public class SelectSort {
public static void selectsort(int[] arr) {
Swap s = new Swap();
/*初始化左端、右端元素索引*/
int left = 0;
int right = arr.length - 1;
while (left < right) {
/*初始化最小值、最大值元素的索引*/
int min = left;
int max = right;
for (int i = left; i <= right; i++) {
/*标记每趟比较中最大值和最小值的元素对应的索引min、max*/
if (arr[i] < arr[min]) {
min = i;
}
if (arr[i] > arr[max]) {
max = i;
}
}
/*最大值放在最右端*/
s.swap(arr, right, max);
/*此处是先排最大值的位置,所以得考虑最小值(arr[min])在最大位置(right)的情况*/
if (min == right) {
min = max;
}
/*最小值放在最左端*/
s.swap(arr, left, min);
/*每趟遍历,元素总个数减少2,左右端各减少1,left和right索引分别向内移动1*/
left++;
right--;
}
}
}
交换类
public class Swap {
public void swap(int[]arr,int i,int j) {
/* arr[i] = arr[i] + arr[j];
arr[j] = arr[i] - arr[j];
arr[i] = arr[i] - arr[j];*/
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
运行结果及详细报错内容
也就是说,交换类中被注释掉的这种交换方法,我只能用一次才能保证算法的正确,两次就会使算法出错,编译,运行可以成功,就是算法排序不正确.不被注释掉的部分是可以用的,用两次也可以让算法排序结果正确.
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
问题应该是出现在我注释掉的交换类方法的代码上,为什么选择排序算法类中创建这个对象,用这个方法只能用一次才能保证正确?用第二次就会使算法排序结果错误.
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
我想知道为什么,三克油!
