C++实现基本排序算法3:直接选择排序
选择排序的基本思想是: 在每一趟排序中,在待排序自表中选出关键字最小或者最大的元素放在其最终的位置。本文主要介绍的是直接选择排序。
1. 直接选择排序的基本原理
参考文献:
2. 代码
#include <iostream>
#include <vector>
void Swap(std::vector<int>& unorder_array, int a, int b) { // 交换数据,不使用中间变量
unorder_array[a] = unorder_array[a] + unorder_array[b]; // 注意这里是unorder_array[b]而不是b
unorder_array[b] = unorder_array[a] - unorder_array[b];
unorder_array[a] = unorder_array[a] - unorder_array[b];
}
// 直接选择排序, 每次选择最小的
void SelectSort(std::vector<int>& unorder_array) {
for (int i = 0; i < unorder_array.size() - 1; ++i) { // 因为我们只有将前面n-1个排序好就可以了,所以循环的次数是i < n - 1
int min = i; // 当前最小值
for (int j = i + 1; j < unorder_array.size(); ++j) {
if (unorder_array[j] < unorder_array[min]) { // 如果后面的元素小于当前最小的min
min = j;
}
}
if (min != i) { // 表示这一轮下来我们min已经发生了改变了
Swap(unorder_array, i, min);
}
}
}
int main()
{
std::vector<int> unorder_array;
int data;
std::cin >> data;
unorder_array.push_back(data);
while (std::cin.get() != '\n') {
std::cin >> data;
unorder_array.push_back(data);
}
std::cout << "orgin seq is: ";
for (auto it = unorder_array.begin(); it != unorder_array.end(); ++it) {
std::cout << *it << " ";
}
std::cout << "\n";
SelectSort(unorder_array);
std::cout << "select sort is: ";
//BubbleSort(unorder_array);
//std::cout << "bubble sort is: ";
for (int i = 0; i < unorder_array.size(); ++i) {
std::cout << unorder_array[i] << " ";
}
return 0;
}
下面介绍归并排序。