2013-11-10 30 views
0

我有以下用於冒泡排序的代碼,但它根本沒有排序。如果我刪除我的布爾值,那麼它的工作正常。我明白,因爲我的a [0]比所有其他元素都要小,所以沒有交換任何人可以幫助我。使用布爾值進行冒泡排序以確定數組是否已排序

package com.sample; 

public class BubleSort { 
    public static void main(String[] args) { 
     int a[] = { 1, 2, 4, 5, 6, 88, 4, 2, 4, 5, 8 }; 
     a = sortBuble(a); 
     for (int i : a) { 
      System.out.println(i); 
     } 

    } 

    private static int[] sortBuble(int[] a) { 
     boolean swapped = true; 
     for (int i = 0; i < a.length && swapped; i++) { 
      swapped = false; 
      System.out.println("number of iteration" + i); 

      for (int j = i+1; j < a.length; j++) { 

       if (a[i] > a[j]) { 
        int temp = a[i]; 
        a[i] = a[j]; 
        a[j] = temp; 
        swapped = true; 
       } 
      } 
     } 

     return a; 
    } 
} 

回答

1

您的泡沫排序錯誤?

private static int[] sortBuble(int[] a) { 
     boolean swapped = true; 
     int n = a.length; 
     for (int i = 0; i < n && swapped; i++) { 
      swapped = false; 
      int newn = 0; 
      System.out.println("number of iteration" + i); 

      for (int j = 1; j < a.length; j++) { 

       if (a[j-1] > a[j]) { 
        int temp = a[j-1]; 
        a[j-1] = a[j]; 
        a[j] = temp; 
        swapped = true; 
        newn = j; 
       } 
      } 
      n = newn; 
     } 

     return a; 
    } 
+0

你的未優化... –

+0

你已經用j語言編寫了我的代碼,但我不這麼認爲與我的代碼不同 – ankit

+0

@ankit討論很有趣,但是你描述了一個不同的進程來獲取數組但以稍微不同的方式工作。他們是不同的。 – imslavko

2

這在本質上是一樣的你,但工作和更高效:

private static int[] bubblesort(int[] nums) 
{ 
    boolean done = false; 

    for (int i = 0; i < nums.length && !done; i++) 
    { 
     done = true; 

     for (int j = nums.length-1; j > i; j--) 
     { 
      if (nums[j] < nums[j-1]) 
      { 
       int temp = nums[j]; 
       nums[j] = nums[j-1]; 
       nums[j-1] = temp; 
       done = false; 
      } 
     } 
    } 

    return nums; 
} 

在我迭代結束時,我們知道第i個元素進行排序,所以我們不需要再看他們了。我們需要布爾值來確定是否需要繼續。如果沒有互換,那麼我們就完成了。我們可以刪除布爾值,它仍然可以工作,但效率會降低。