选择排序

/*

(有序区,无序区)。在无序区里找一个最小的元素跟在有序区的后面。对数组:比较得多,换得少。

选择排序思路:
1. 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
2. 从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾
3. 以此类推,直到所有元素均排序完毕

*/

// 选择排序
void SelectionSort(vector<int>& v) {
    int min, len = v.size();
    for (int i = 0; i < len - 1; ++i) {
        min = i;
        for (int j = i + 1; j < len; ++j) {
            if (v[j] < v[min]) {    // 标记最小的
                min = j;
            }
        }
        if (i != min)  // 交换到前面
            swap(v[i], v[min]);
    }
}

// 模板实现
template<typename T> 
void Selection_Sort(std::vector<T>& arr) {
    int len = arr.size();
    for (int i = 0; i < len - 1; i++) {
        int min = i;
        for (int j = i + 1; j < len; j++)
            if (arr[j] < arr[min])
                min = j;
        if(i != min)
            std::swap(arr[i], arr[min]);
    }
}

 

posted @ 2019-04-10 16:05  wpgraceii  阅读(157)  评论(0编辑  收藏  举报