使用while语句时冒泡排序

时间:2015-03-02 19:22:50

标签: arrays sorting while-loop bubble-sort

我必须编写代码来对某些数字进行排序,虽然我决定使用“for”而不是“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++;
}
}
}

2 个答案:

答案 0 :(得分:1)

您的实施看起来有点复杂。我建议你重构并将排列代码放在一个单独的方法中,以使其更具可读性。此外,您应该检查每次迭代是否有任何排列。如果没有排列,则完成。否则你应该再次迭代。通过一些重构,事情会变得更简单。

以下是我使用您的输入进行测试的实现

这个`simpleBublleSort&#39;方法依赖于swap方法和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);


 }

交换方法与交换两个比较元素的方法相同

 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

,以使其升序

答案 1 :(得分:0)

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

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

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

旁注:泡泡排序缺少某些东西。它应检查内循环中是否有任何交换。如果没有,排序就完成了,你可以退出外循环。