2015-03-02 61 views
1

我必须编写代码来对一些数字进行排序,尽管我已经决定使用“for”而不是“while”,但我想知道它为什么会这样做。它的排序的一切,但它留下的14个地方是,如果有人可以只解释这会是非常apprieciated使用while语句时的气泡排序

public class SortForMe { 

public static void main(String args[]) { 
int ListOfNumbers[] = {16, 100, 205, 8, 1, 3, 2, 5, 7, 6, 15, 10, 14}; 
int Length = ListOfNumbers.length; 
int Sorted = 1; 
int T; 
int Order = 0; 
System.out.println("Given number :"); 
while(Order < Length) { 
    System.out.println(" " + ListOfNumbers[Order]); 
    Order++; 
        } 
System.out.println("\n"); 
System.out.println("After Sort:"); 
while (Sorted < Length) { 
    while (Order < Length - Sorted) { 
    if (ListOfNumbers[Order] > ListOfNumbers[Order + 1]) { 
     int temp = ListOfNumbers[Order]; 
     ListOfNumbers[Order] = ListOfNumbers[Order + 1]; 
     ListOfNumbers[Order + 1] = temp; 
    } 
    Order++; 
    } 
    Order = 0; 
    Sorted++; 

} 
while(Order < Length) { 
    System.out.println(ListOfNumbers[Order]); 
    Order++; 
} 
} 
} 
+0

你只需要多一个循环,使** INT排序= 0; ** – Javaluca 2015-03-02 19:35:31

回答

0

那是因为你使用的变量Order在第一循环中显示阵列的初始状态。

当它在内部循环中使用时,它将已经在数组的末尾,因此在第一次迭代中没有任何东西被排序。 Sorted变量增加,使最后一项未排序。

在显示初始状态的循环和执行排序的循环之间插入一个Order = 0;

附注:气泡排序是缺少的东西。它应该检查在内部循环中是否有交换。如果没有,则排序完成,您可以退出外部循环。

1

你的实现看起来有点复杂。我建议你重构并将排列代码放在一个单独的方法中,以使其更具可读性。你也应该检查每次迭代是否有任何排列。如果没有排列,那就完成了。否则,你应该再次迭代。随着一些重构的变得更简单。

这里是我没有和你输入测试的执行

这`simpleBublleSort”的方法取决于交换方法和printArray方法(见下文)

public void simpleBubbleSort(int[] datas) 
{ 
    boolean stillHasDisorder = false; 
    do 
    { 
     stillHasDisorder = false; 

     for (int i = 0; i <= datas.length - 2; i++) 
     { 
      if (new Integer(datas[i]).compareTo(new Integer(datas[i+1])) < 0) 
      { 
       swap(datas,i, i + 1); 
       stillHasDisorder = true; 


      } 

     } 

     printArray(datas); 

    } while (stillHasDisorder); 


} 

Swap方法是同你正在做交换两个比较的元素

public void swap(int[] datas, int position1, int position2) 
{ 
    int temp = datas[position1]; 
    datas[position1] = datas[position2]; 
    datas[position2] = temp; 
} 

什么printArray使阵列的一个不错的打印每次迭代后,所以我们可以直观看看这是怎么回事

public void swap(int[] datas, int position1, int position2) 
{ 
    int temp = datas[position1]; 
    datas[position1] = datas[position2]; 
    datas[position2] = temp; 
} 

这里是使用您输入的演示代码数据单项

public static void doDemo() { 

    int[] datas = {16, 100, 205, 8, 1, 3, 2, 5, 7, 6, 15, 10, 14}; 
    (new BubbleSort()).simpleBubbleSort(datas); 
} 

public static void main(String[] args) { 
    doDemo(); 

} 

下面是结果:

[100 205 16 8 3 2 5 7 6 15 10 14 1]

[205 100 16 8 3 5 7 6 15 10 14 2 1]

[205 100 16 8 5 7 6 15 10 14 3 2 1]

[205 100 16 8 7 6 15 10 14 5 3 2 1]

[205 100 16 8 7 15 10 14 6 5 3 2 1]

[205 100 16 8 15 10 14 7 6 5 3 2 1]

[205 100 16 15 10 14 8 7 6 5 3 2 1]

[205 100 16 15 14 10 8 7 6 5 3 2 1]

[205 100 16 15 14 10 8 7 6 5 3 2 1 ]

当然,你可以把它上升,通过改变比较的>0代替<0