2016-02-26 69 views
0

我有一个使用Java进行气泡排序的函数,这段代码可以工作并对数组进行排序。然而,问题是我不知道它是如何分类的,因为它看起来不像标准的气泡排序。Java Bubble Sort Acting奇怪

public static void swap (int [ ] data, int index1, int index2) 
// POST: elements at indexes are exchanged 
{ int temp = data[index1];        // temporary to hold first value 
    data[index1] = data[index2]; 
    data[index2] = temp; 
} 

public static void bubbleSort (int [ ] data) 
// POST: elements in data array are sorted in ascending order 
{ for (int ct1=0; ct1<data.length-1; ct1++)   // outer loop moves one element into place 
    { for (int ct2=0; ct2<data.length-1-ct1; ct2++) 
      if (data[ct2] > data[ct2+1])     // swap if element on left bigger than right 
       swap (data, ct2,ct2+1); 
     for (int i = 0; i < data.length; i++) System.out.print(data[i] + " "); 
     System.out.println(); 
    } 
} 

我理解的气泡排序将采用数组{40, 90, 10, 60, 20}并比较0和1的索引。如果第0个指数大于第1个指数,那么他们会交换。然后,在这种情况下,40和90会留在原来的位置,然后比较第一和第二个索引,导致90和10换。这将继续n - 1次,其中n是数组的长度。

问题是,使用该功能似乎给输出:

Bubble sort: 
Starting array: 40 90 10 60 20 
40 10 60 20 90 
10 40 20 60 90 
10 20 40 60 90 
10 20 40 60 90 

任何人可以帮助解释这个吗?

它似乎是比较任意值,并没有像它应该检查40和90。

+1

它并不是任意比较事物。它正在完成代码的功能。从字面上看,它将更大的值“冒泡”到数组的末尾。在你的第一个内部循环中,设置一个'System.out.println'--可能有助于为你澄清它。 – kevin628

+0

该行为与您的理解相符。您创建的输出是在每个交换之后处理每行之后。你应该使用更多的大括号。 – BevynQ

+0

恰恰是我在找凯文。如果您发布答案,我会接受它。 – Nic

回答

0

内,您的冒泡法,你开始从0阵列高达数组的长度 - 1,而不是仅仅做简单,在这样的反向运行:

public static void bubbleSort(int [] data) { 
    int k; 
    for (int m = data.length; m >= 0; m--) { 
     for (int i = 0; i < data.length - 1; i++) { 
      k = i + 1; 
      if (array[i] > array[k]) { 
       swapNumbers(i, k, array); 
      } 
     } 
     // Time to test this new array here: 
    for (int i = 0; i < data.length; i++) { 
     System.out.print(data[i] + ", "); 
    } 
     System.out.println("\n");   
    } 
} 

检查打印解决方案正确,并让我知道

0

它将交换,直到与ct2一个循环结束。内循环 ,将进行4次。

它就像一块落入水中的岩石。

Engilsh差,不好意思〜

0

你冒泡排序的行为,你希望如此的方式。 它以相反的顺序排序最低到最高(即最后一列被设置在前)

我想你所遇到的问题是,输出采样频率 不匹配什么是你的头怎么回事。

,如果你改变代码稍

public static void swap (int [ ] data, int index1, int index2){ 
    int temp = data[index1]; 
    data[index1] = data[index2]; 
    data[index2] = temp; 
} 

public static void bubbleSort (int [ ] data) { 
    for (int ct1=0; ct1<data.length-1; ct1++) { 
     for (int ct2=0; ct2<data.length-1-ct1; ct2++) { 
      if (data[ct2] > data[ct2 + 1]) { 
       swap(data, ct2, ct2 + 1); 
      // non functional change to move sampling point 
       for (int i = 0; i < data.length; i++) { 
        System.out.print(data[i] + " "); 
       } 
       System.out.println(); 
      } 
     } 
    } 
} 

public static void main(String[] args) { 
    bubbleSort(new int[]{40,90,10,60,20}); 
} 

这将产生输出

40 10 90 60 20 
40 10 60 90 20 
40 10 60 20 90 
10 40 60 20 90 
10 40 20 60 90 
10 20 40 60 90 

这是我想你期望看到的。