简述
冒泡排序:依次比较相邻的数据,将小数据放在前,大数据放在后;即第一趟先比较第1个和第2个数,大数在后,小数在前,再比较第2个数与第3个数,大数在后,小数在前,以此类推则将最大的数"滚动"到最后一个位置;第二趟则将次大的数滚动到倒数第二个位置…第n-1(n为无序数据的个数)趟即能完成排序
以下面5个无序的数据为例:40 8 15 18 12
第1趟: 8 15 18 12 40
第2趟: 8 15 12 18 40
第3趟: 8 12 15 18 40
第4趟: 8 12 15 18 40
运行代码
/**
*********************
* Bubble sort
*********************
*/
public void bubbleSort() {
boolean tempSwapped;
DataNode tempNode;
for (int i = length - 1; i > 1; i--) {
tempSwapped = false;
for (int j = 0; j < i; j++) {
if (data[j].key > data[j + 1].key) {
// Swap.
tempNode = data[j + 1];
data[j + 1] = data[j];
data[j] = tempNode;
tempSwapped = true;
} // Of if
} // Of for j
// No Swap in this round. The data are already sorted.
if (!tempSwapped) {
System.out.println("Premature");
break;
} // Of if
System.out.println("Round " + (length - i));
System.out.println(this);
} // Of for i
}// Of bubbleSort
/**
*********************
* Test the method.
*********************
*/
public static void bubbleSortTest() {
int[] tempUnsortedKeys = { 1, 3, 6, 10, 7, 5, 9 };
String[] tempContents = { "if", "then", "else", "switch", "case", "for", "while" };
DataArray tempDataArray = new DataArray(tempUnsortedKeys, tempContents);
System.out.println(tempDataArray);
tempDataArray.bubbleSort();
System.out.println("Result\r\n" + tempDataArray);
}// Of bubbleSortTest
运行结果
-------bubbleSortTest-------
-------bubbleSortTest-------
I am a data array with 7 items.
(1, if) (3, then) (6, else) (10, switch) (7, case) (5, for) (9, while)
Round 1
I am a data array with 7 items.
(1, if) (3, then) (6, else) (7, case) (5, for) (9, while) (10, switch)
Round 2
I am a data array with 7 items.
(1, if) (3, then) (6, else) (5, for) (7, case) (9, while) (10, switch)
Round 3
I am a data array with 7 items.
(1, if) (3, then) (5, for) (6, else) (7, case) (9, while) (10, switch)
Premature
Result
I am a data array with 7 items.
(1, if) (3, then) (5, for) (6, else) (7, case) (9, while) (10, switch)