我创建了这个方法来冒泡搜索数组它返回一个"略微"有序的数组。
例如,当我输入:42911125
它返回:24951112
public static void bubbleSort(int array[]){
boolean fixed= false;
while(fixed==false){
for(int i=0; i<array.length-1; i++){
int temp;
fixed=true;
if (array[i] > array[i+1]){
temp= array[i+1];
array[i+1]= array[i];
array[i]= temp;
fixed=false;
}
}
}
}
在 for 循环之前移动fixed=true
public static void bubbleSort(int array[]){
boolean fixed = false;
while(!fixed){
fixed = true;
for(int i = 0; i < array.length-1; ++i){
int temp;
if (array[i] > array[i+1]){
temp = array[i+1];
array[i+1] = array[i];
array[i] = temp;
fixed = false;
}
}
}
}
Ryan,我认为如果你移动固定=true;在for循环之外,它可能会解决问题。我还没有测试过这个。
我认为你应该稍微修改一下你的代码。将固定 = true 语句移出 for 循环。此固定标志用于指示 for 循环中是否发生任何交换。出现您的问题是因为 5 小于 11,并且发生了交换,将固定更改为 false,但下一次迭代会覆盖固定为 true。而for循环结束,while检查修复,发现是真的,程序停止。