从头写一个简单的交换排序
思路:遍历要排序的序列中的每一条记录,让每一条记录的关键字和它后面的每一条记录的关键字两两比较,如果大于,则两条记录交换。在第一次遍历结束后,序列第一个位置处的记录的关键字会变成最小的。在每一次遍历结束后,被遍历位置处的记录跟它右侧的记录相比,它的关键字都是最小的。
框架:
#include <vector>
#include <algorithm>
#include <iostream>
void Sort(std::vector<int>& values) {
}
int main() {
std::vector<int> values{1, 3, 2, 6, 4, 5};
std::ranges::for_each(values, [](int value){std::cout << value << ' ';});
return 0;
}
遍历数组 values 中的每一个元素。
void Sort(std::vector<int>& values) {
for (int i = 0; i < values.size(); ++i) {
}
}
对于每一个元素,与它后面的每一个元素两两比较,如果大于,则交换两个元素的位置。交换两个元素的位置使用已定义的函数void Swap(values, i, j);
。
void Sort(std::vector<int>& values) {
for (int i = 0; i < values.size(); ++i) {
for (int j = i + 1; j < values.size(); ++j) {
if (values[i] > values[j]) {
Swap(values, i, j);
}
}
}
}
定义函数void Swap(values, i, j);
,交换索引 i 和 j 处两个元素的位置。
void Swap(std::vector<int>& values, int i, int j) {
int temp = values[i];
values[i] = values[j];
values[j] = temp;
}
完整代码:
/*
* 从头写一个简单的交换排序
* */
#include <algorithm>
#include <iostream>
#include <vector>
void Swap(std::vector<int> &values, int i, int j) {
int temp = values[i];
values[i] = values[j];
values[j] = temp;
}
void Sort(std::vector<int> &values) {
for (int i = 0; i < values.size(); ++i) {
for (int j = i + 1; j < values.size(); ++j) {
if (values[i] > values[j]) {
Swap(values, i, j);
}
}
}
}
int main() {
std::vector<int> values{1, 3, 2, 6, 4, 5};
Sort(values);
std::ranges::for_each(values, [](int value) { std::cout << value << ' '; });
return 0;
}