|
发表于 2022-8-27 23:36:15
|
显示全部楼层
没看懂 “你的任务”
我是这样写冒泡排序的
我比较喜欢从前往后遍历
两层循环的结束条件都是小于data.size()
外层从0开始,内层从 i + 1 开始
- template<typename T>
- void sort(vector<T> &data, compare_t<T> comp = less_t<T>()) {
- for(size_t i = 0; i < data.size(); ++i) {
- for(size_t j = i + 1; j < data.size(); ++j) {
- if(!comp(data[i], data[j])) swap(data[i], data[j]);
- }
- }
- }
复制代码
另外,趁此机会再学习一下C++的模板,还有std::function
- #include <iostream>
- #include <vector>
- #include <functional>
- using std::cout, std::endl;
- using std::vector;
- using std::ostream;
- using std::function;
- template<typename T>
- void swap(T &a, T &b) {
- T temp = a; a = b; b = temp;
- }
- template<typename T>
- struct less_t {
- bool operator()(const T &a, const T &b) {
- return a < b;
- }
- };
- template<typename T>
- struct greater_t {
- bool operator()(const T &a, const T &b) {
- return a > b;
- }
- };
- template<typename T>
- using compare_t = function<bool (const T &a, const T &b)>;
- template<typename T>
- void sort(vector<T> &data, compare_t<T> comp = less_t<T>()) {
- for(size_t i = 0; i < data.size(); ++i) {
- for(size_t j = i + 1; j < data.size(); ++j) {
- if(!comp(data[i], data[j])) swap(data[i], data[j]);
- }
- }
- }
- template<typename T>
- ostream &operator<<(ostream &os, const vector<T> &data) {
- for(size_t i = 0; i < data.size(); ++i) {
- os << data[i] << " ";
- }
- return os;
- }
- int main() {
- {
- vector<size_t> data = {1, 2, 4, 3, 6, 5};
- sort<size_t>(data);
- cout << data << endl;
- }
- {
- vector<size_t> data = {1, 2, 4, 3, 6, 5};
- sort<size_t>(data, less_t<size_t>());
- cout << data << endl;
- }
- {
- vector<size_t> data = {1, 2, 4, 3, 6, 5};
- sort<size_t>(data, [](const size_t &a, const size_t &b) {return a < b;});
- cout << data << endl;
- }
- {
- vector<size_t> data = {1, 2, 4, 3, 6, 5};
- sort<size_t>(data, greater_t<size_t>());
- cout << data << endl;
- }
- return 0;
- }
复制代码 |
|