47.1 一个基础算法。
47.2 与插入排序不同,先做最麻烦的,要进行 n − 1次比较才能获得最小的数据。数据一旦被选择并确定位置,就不再改变。
47.3 其时间复杂度为O(n^2)。
47.4 只需要两个额外的空间来存放最小数据的引用与下标,因此空间复杂度为O(1)。
代码:
/**
*******************
* Selection sort. All data are valid.
*******************
*/
public void selectionSort() {
DataNode tempNode;
int tempIndexForSmallest;
for (int i = 0; i < length - 1; i++) {
// Initialize.
tempNode = data[i];
tempIndexForSmallest = i;
for (int j = i + 1; j < length; j++) {
if (data[j].key < tempNode.key) {
tempNode = data[j];
tempIndexForSmallest = j;
} // Of if
} // Of for j
// Change the selected one with the current one.
data[tempIndexForSmallest] = data[i];
data[i] = tempNode;
} // Of for i
}// Of selectionSort
/**
*******************
* Test the method.
*******************
*/
public static void selectionSortTest() {
int[] tempUnsortedKeys = { 5, 3, 6, 10, 7, 1, 9 };
String[] tempContents = { "if", "then", "else", "switch", "case", "for", "while" };
DataArray tempDataArray = new DataArray(tempUnsortedKeys, tempContents);
System.out.println(tempDataArray);
tempDataArray.selectionSort();
System.out.println("Result\r\n" + tempDataArray);
}// Of selectionSortTest