选择排序是一种常见的排序方法。它的主要思路是:遍历数组,每一次找出所遍历数组中的最小值或最大值,放在数组开头或者末尾,然后再遍历剩下的数组并找到最小值/最大值,直到遍历完为止。
所谓二元选择排序,就是在遍历数组的过程中,同时寻找最小值和最大值,放在数组的开头和末尾,这样可以减少遍历次数,提高效率。具体代码实现如下:
void select_sort(vector<int>& numset) {
for (auto i = 0; i != numset.size() / 2; i++) {
int minindex = i, maxindex = i;
for (auto j = i + 1; j != numset.size() - i; j++) {
if (numset[j] < numset[minindex]) {
minindex = j;
}
if (numset[j] > numset[maxindex]) {
maxindex = j;
}
}
if (minindex == maxindex) break;//如果最大最小相等证明后面的数都等于numset[i],不必继续。
swap(numset[i], numset[minindex]);
if (maxindex == i) {
maxindex = minindex;
}//特殊情况处理
swap(numset[numset.size() - 1 - i],numset[maxindex]);
}
}