【发布时间】:2016-06-09 02:13:39
【问题描述】:
我在这里有一个使用 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。
【问题讨论】:
-
看起来不像是在随意比较。它正在做代码所做的事情。从字面上看,它将较大的值“冒泡”到数组的末尾。在您的第一个内部循环中,设置一个
System.out.println-- 这可能有助于您澄清它。 -
行为符合您的理解。您正在创建的输出是在处理每一行之后而不是在每次交换之后。你应该使用更多的大括号。
-
正是我要找的凯文。如果您发布答案,我会接受。
标签: java arrays sorting bubble-sort