这是进行冒泡排序的正确方法吗?

时间:2018-06-13 12:43:19

标签: java arrays sorting bubble-sort

只是想知道这是否是执行冒泡排序算法的正确方法。我在互联网上发现了这种做冒泡排序的方式,但是我没有得到这个算法的逻辑,这是来自网站的算法:

    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]+",");


     }

 }
}

1 个答案:

答案 0 :(得分:0)

你需要(n -i),因为在每次传球之后,你知道最大的元素在它的正确位置[结束]。因此,您不需要为这个最大元素执行任何交换操作。它只是减少了交换操作的数量。

你不需要(j -1)。该示例将j从索引1迭代到(n - i)[excluded],并且您将j从索引0迭代到(integerArray.length - 1)[excluded]

建议:拿笔和纸并执行算法。您将能够理解我们为什么需要(n -i)