C++选择排序原理及实现
原理
假设有一个数组,目标是按升序排序,选择排序就是从下标为0的地方开始,依次往后比较,找到后面的元素中比他最小的元素,将他们两个位置进行交换,然后再遍历下一个。
实现
我这里是用x代表获取到的最小元素对应的下标,在第一层循环初始化为i,temp是用于跟踪最小元素的值,在双层循环里面获取最小元素的值和下标,如果获取的不是vec[i]元素自己,就进行交换,我是直接写出来了,展示以下交换逻辑,也可以使用vector的swap()函数直接交换,就用不上temp变量了。代码:
void selectsort(vector<T> vec) {T temp;T x;//存储找到的temp的元素下标for (auto i = 0; i < vec.size()-1; i++){temp = vec[i];x = i;for (auto j = i+1; j< vec.size();j++) {if (temp > vec[j]) { temp = vec[j];x = j;}}if (x!=i) {vec[x] = vec[i];vec[i] = temp;}}cout << "选择排序(升序排序):";for (auto i = 0; i < vec.size(); i++){cout << vec[i];if (i!=vec.size()-1) {cout << ",";}}cout << endl;
}
注:我故意只传值不修改原数组,毕竟我这个数组还要用来写其他的排序算法,懒~