第 44 天: 希尔排序
/**
* Shell sort.
*/
public void shellSort() {
dataNode tempNode;
int tempRound = 1;
int[] tempJumpArray = {5, 3, 1};
int p = 0;
for (int tempJump; p < tempJumpArray.length; p++) {
tempJump = tempJumpArray[p];
for (int j = tempJump; j < length; j++) {
tempNode = data[j];
int i;
for (i = j - tempJump; i >= 0 && tempNode.key < data[i].key; i -= tempJump) {
data[i + tempJump] = data[i];
}// Of for i
data[i + tempJump] = tempNode;
}//Of for j
System.out.println("Round " + (tempRound++));
System.out.println(this);
}// Of for tempJump
}// Of shellSort
/**
* Teat unit.
*/
public static void shellSortTest() {
int[] tempUnsortedKeys = {5, 3, 6, 10, 7, 1, 9, 12, 8, 4};
String[] tempContents = {"if", "then", "else", "switch", "case", "for", "while", "throw", "until", "do"};
DataArray tempDataArray = new DataArray(tempUnsortedKeys, tempContents);
System.out.println(tempDataArray);
tempDataArray.shellSort();
System.out.println("Result\r\n" + tempDataArray);
}// Of shellSortTest
希尔排序又叫缩小增量排序,按照不同步长进行插入排序,也比较简单。