算法思想
二元选择排序是对简单选择排序的改进,简单选择排序对序列每一次遍历只找出一个元素,而二元选择排序在每一次遍历中都会找出序列两端的元素(最大和最小),两端同时向中间逼近。这样理论上遍历的次数就减少了一半,加快了排序速度。
实现步骤
以从小到大排列为例:
1.遍历序列,找出最小元素和最大元素
2.将最小元素与无序部分第一个元素交换,最大元素与无序部分最后一个元素交换
3.更新无序部分边界
4.重复步骤1-3,直到无序部分不存在元素
源码
void BinarySelectionSort(std::vector<int> &vec)
{
if (vec.size() <= 1) {
return ;
}
int i, j, min_index, max_index;
for (i = 0; i < vec.size()>>1; ++i) {//外层循环控制无序部分的边界
min_index = i;
max_index = vec.size()-i-1;
for (j = i; j < vec.size()-i-1; +