我有一个简单的算法来对数组中的数字进行排序,所有元素都会被排序,除了最后一个。我已经尝试更改我的循环的边界来修复它,但它只是创建了一个无限循环。
答案 0 :(得分:0)
while (pointer < arrayLength){
int min = findMinFrom(pointer);
for (int i = pointer; i < arrayLength; i ++){
if (A[i] == min){
swap(i, pointer);
pointer ++;
}
compNewS ++;
}
}
你看到了什么问题?只有在A[i] == min
时才会更新指针,否则它将继续循环。将您的pointer++
排除在该状态之外。
这可以通过两个循环来完成,但这里是您的代码的调整版本:
public class Numbers {
private static int [] A ;
public static void main(String [] args) {
int [] array = {3,2,1,4,5,6,7,8,9,7};
A = array;
newSort(array, array.length);
for(int i = 0; i < A.length;i++)
System.out.println(A[i]);
}
public static void newSort(int[] array, int arrayLength){
int pointer = 0;
int p = 0;
while(p < array.length) {
int min = findMinFrom(p,array);
int temp = array[p];
array[p] = min;
array[min] = temp;
p++;
}
}
public static int findMinFrom(int p, int[] array){
int min = p;
for (int i = p; i < array.length; i ++){
if (A[i] < array[p]){
min =i;
}
}
return min;
}
}