只是想知道这是否是执行冒泡排序算法的正确方法。我在互联网上发现了这种做冒泡排序的方式,但是我没有得到这个算法的逻辑,这是来自网站的算法:
int n = arr.length;
int temp = 0;
for(int i=0; i < n; i++)
{
for(int j=1; j < (n-i); j++)
{
if(arr[j-1] > arr[j])
{
//swap elements
temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
我知道你需要在Bubblesort中使用嵌套循环,但是我不理解的部分是你需要的部分
for(int j=1; j < (n-i); j++){
if(arr[j-1] > arr[j])
为什么&#34; n减去1&#34;需要或&#34; j减1需要&#34;,你不能只有两个完全匹配的循环,如for(int i=0; i < n; i++)
和for(int j=0; j < n; j++)
作为嵌套循环?任何人都可以给我一个视觉外行的术语解释为什么会这样。
因此,我制作了一个带有两个完全相同的嵌套循环的冒号排序算法。 但我不知道它是否正常。这是代码:
import java.lang.Math; // headers MUST be above the first class
import java.util.Arrays;
// one class needs to have a main() method
public class HelloWorld
{
// arguments are passed using the text field below this editor
public static void main(String[] args)
{
int integerArray [] = {4,6,1,3,2,8,678,122,12,29,57, -1};
int temporaryValue;
for (int i = 0; i < 11; i++) // integerArray.lenght
{
for(int j = 0; j<11; j++)
{
if (integerArray [j] > integerArray [j+1])
{temporaryValue = integerArray[j];
integerArray [j] = integerArray [j+1];
integerArray [j+1] = temporaryValue;
}
}
}
for (int j = 0; j < integerArray.length; j++)
{
System.out.print(integerArray[j]+",");
}
}
}
答案 0 :(得分:0)
你需要(n -i),因为在每次传球之后,你知道最大的元素在它的正确位置[结束]。因此,您不需要为这个最大元素执行任何交换操作。它只是减少了交换操作的数量。
你不需要(j -1)。该示例将j从索引1迭代到(n - i)[excluded],并且您将j从索引0迭代到(integerArray.length - 1)[excluded]
建议:拿笔和纸并执行算法。您将能够理解我们为什么需要(n -i)