Java Bubble Sort Acting Strange

时间:2016-02-26 01:51:07

标签: java arrays sorting bubble-sort

我在这里有一个使用Java进行冒泡排序的函数,这个代码可以工作并对数组进行排序。但问题是,我不知道它是如何对它进行排序的,因为它看起来不像标准的冒泡排序。

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.

3 个答案:

答案 0 :(得分:0)

在你的bubbleSort方法中,你正在从0开始一个数组到数组的长度 - 1.而只是make很简单,然后像这样反向运行:

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");           
    }
}

检查您的解决方案是否正确打印并告诉我

答案 1 :(得分:0)

它将在ct2的一个循环中交换到最后。 内循环,将进行4次。

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

Engilsh很穷,抱歉〜

答案 2 :(得分: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 

这是我认为你期望看到的。