所以,我有我的代码,但我的数字没有排序。我有什么东西不见了吗?
我的排序代码,没有其他方法,如打印和
public static int[] swapElement (int [] x, int index1, int index2) {
int t = x[index1];
x[index1] = x[index2];
x[index2] = t;
return x;
}
public static int[] sortArray (int [] x) {
int index = 0;
int i=0;
int[] toSort= new int[x.length];
for(int m=0;m<x.length;m++){
index = indexOfMaxInRange(x);
toSort=swapElement(x,i,index);
i++;
}
return toSort;
}
public static int indexOfMaxInRange (int[] x) {
int max = 0;
int i=0;
int maxLocation = 0;
while(i < x.length) {
if (x[i] > max) {
max = x[i];
maxLocation= i;
}
i++;
}
for(int m=0;m<x.length;m++){
index = indexOfMaxInRange(x);
toSort=swapElement(x,i,index);
i++;
}
在这里,您首先将最大元素放在第一个、第二个、第三个etc索引中。问题是,你不是在第二个索引中找到第二大的元素,在第三个索引中寻找第三大的元素等等,而是在最大的元素周围交换。
要解决此问题,我建议您通过指定要搜索的范围,而不是让方法遍历整个数组,使方法indexOfMaxInRange
名副其实。
编辑:根据请求,以下是如何为您的方法添加下限:
public static int indexOfMaxInRange (int[] x, int firstIndex) {
int max = Integer.MIN_VALUE;
int i=firstIndex; //note! initialize to min instead of 0
int maxLocation = firstIndex;
while(i < x.length) {
if (x[i] > max) {
max = x[i];
maxLocation= i;
}
i++;
}
return maxLocation;
}
注意变化:添加的参数(第一个要搜索的索引-0
意味着像以前一样搜索整个数组)和i
被初始化为这个新参数。
(我还将max
的初始值更改为Integer.MIN_VALUE
,使其即使最大值为负数也能工作,但这与您最初的问题无关)