简单选择排序(Simple Selection Sort),一趟简单选择排序的操作为:通过n - i 次关键字间的比较,从n - i + 1个记录中选出关键字最小的记录,并和第i(1 <= i <= n)个记录交换之。时间复杂度为O(n^2)。
// 简单选择排序 void CSelectionSort::SimpleSelectionSort( void ) { const int count = 9 ; int L[count] = { 0 , 49 , 38 , 65 , 97 , 76 , 13 , 27 , 49 }; for ( int i = 0 ; i < count; ++ i) { int j = SelectMinKey(L, count, i); if (i != j) { int temp = L[i]; L[i] = L[j]; L[j] = temp; } } // 打印排序结果。 for ( int i = 0 ; i < count; ++ i) { cout << L[i] << " \t " ; } cout << endl; } // 简单选择排序之选最小值 int CSelectionSort::SelectMinKey( int L[], int count, int i) { int index = i; for ( int j = i + 1 ; j < count; j ++ ) { if (L[j] < L[index]) index = j; } return index; }
简单选择排序是每次都要选取待排序序列里面,记录关键值最小的元素索引。然后和本次待排序序列的第一个元素交换。而起泡排序是只要发现相临的两个元素逆序就交换。