总的来说,每当我调用此方法对数组进行排序时,它就会停止,就好像它在等待响应一样。知道为什么它不能正常工作吗?
public void bubbleSort(){
boolean finished = false;
boolean swapOccurred = false;
int i = 0;
int next = i + 1;
while (finished == false)
{
for (; i < theArray.length - 1; i++)
{
if (theArray[i] > theArray[next])
{
swapValues(theArray[i], theArray[next]);
swapOccurred = true;
}
}
if (swapOccurred == false)
{
finished = true;
}
}
}
private void swapValues(int i, int next) {
int temp;
temp = i;
i = next;
next = temp;
}
答案 0 :(得分:2)
如果是java,那么
i
变量只在swap方法中改变了值,它们有与阵列阵列的细胞无关。 答案 1 :(得分:1)
问题在于你的交换。
在C中,参数按值传递,因此当您执行交换时,传入的值不会受到影响,因此不会发生任何事情。您需要将指针传递给数字(然后在内部取消引用它们):
private void swapValues(int *i, int *next) {
int temp;
temp = *i;
*i = *next;
*next = temp;
}
然后用变量的地址调用它来交换:
swapValues(&theArray[i], &theArray[next]);
编辑:哈 - @Zielu看到了Java,我看到了C.两种情况都有同样的问题,正如@Zielu指出的那样,你还需要增加下一步。我相信你实际上只是想用[i + 1]作为你的索引代替下一个。