Java 排序数组(气泡排序)
我对数组排序有点怀疑,是的,我对编程是新手。以下面的代码为例:Java 排序数组(气泡排序),java,arrays,sorting,Java,Arrays,Sorting,我对数组排序有点怀疑,是的,我对编程是新手。以下面的代码为例: public void bubbleSort(int[] array) { boolean swapped = true; int j = 0; int tmp; while (swapped) { swapped = false; j++; for (int i = 0; i < array.length - j; i++) { if (array[i] > array[i +
public void bubbleSort(int[] array) {
boolean swapped = true;
int j = 0;
int tmp;
while (swapped) {
swapped = false;
j++;
for (int i = 0; i < array.length - j; i++) {
if (array[i] > array[i + 1]) {
tmp = array[i];
array[i] = array[i + 1];
array[i + 1] = tmp;
swapped = true;
}
}
}
public void bubbleSort(int[]数组){
布尔交换=真;
int j=0;
int tmp;
while(交换){
交换=假;
j++;
对于(int i=0;i数组[i+1]){
tmp=阵列[i];
数组[i]=数组[i+1];
数组[i+1]=tmp;
交换=真;
}
}
}
在上面的代码中,为什么我们必须使用j++
和i<(array.length-j)
作为测试表达式?我们本可以使用i<(array.length)
作为测试表达式,而忽略变量j
。有什么答案吗?“为什么我们必须使用j++和i<(array.length-j)作为测试表达式?”
背后的原因是,在任何时候,元素array[array.length-j]
到array[array.length-1]
都已排序
示例:假设您有长度为
n
的数组
因此,在第一次迭代之后,最大的元素将被放置在数组[n-1]
因为最大的元素在下一次迭代中已经被排序,所以我们只对长度
n-1
的数组进行排序
在第二次迭代之后,第二大元素将被放置在数组[n-2]
中
因此,由于第一大和第二大元素已经在下一次迭代中进行了排序,我们将只对长度为n-2
的数组进行排序,依此类推
算法的运行时间将为
正如你所说,我们本可以使用
i<(array.length-1)
,但我们将徒劳无功地完成大量工作。如果我们这样做,运行时间将是(nn),也就是O(nn)。但尽管运行时间仍然是O(n*n)但是很明显,它比第一个小,所以第一个是有效的。当我不考虑J时,我得到以下错误:java. Lang.ArayIdjxOutOfFunsExcExp:6:是的,读得很好,我相信它会对你有很大帮助。是的,你必须使用<代码> i(数组,长度1)。非常感谢!这真的很有帮助!!你可能想在星号前加一个反斜杠,这样星号就可以显示出来,而不是用斜体。(编辑太小了,我无法修改)。