第 45 天: 冒泡排序
可以向后冒,也可以向前冒
/**
* Bubble sort.
*/
public void bubbleSort() {
boolean tempSwapped;
DataNode tempNode;
for (int i = 0; i < length; i++) {
tempSwapped = false;
for (int j = length - 1; j > i; j--) {
if (data[j].key < data[j - 1].key) {
tempSwapped = true;
tempNode = data[j];
data[j] = data[j - 1];
data[j - 1] = tempNode;
}// Of if
}//Of for j
if (!tempSwapped) {
System.out.println("Premature ");
break;
}// Of if
System.out.println("Round " + (i+1));
System.out.println(this);
}// Of for i
}// Of bubbleSort
/**
* Test unit.
*/
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
注意无论向前向后冒泡时候,每一轮确定一个位置,当某一轮没有发生交换,说明已经有序,退出循环即可。相邻两个比较的时候,注意不要越界。