C++提高编程 5 STL -常用算法(排序算法)
5.3 常用排序算法
学习目标:掌握常用的排序算法
算法简介:sort //对容器内元素进行排序
random_shuffle //洗牌 指定范围内的元素随机调整次序
merge //容器元素合并,并存储到另一个容器
reverse //反转指定范围内的元素
5.3.1 sort //对容器内元素进行排序
函数原型:sort(iterator beg, iterator end, _Pred);
#includeusing namespace std; #include #include //普通函数 void print1(int val) { cout << val << " "; } //仿函数 class print2 { public: void operator()(int val) { cout << val << " "; } }; //常用排序算法 sort void test1() { vector<int>v; v.push_back(10); v.push_back(30); v.push_back(50); v.push_back(20); v.push_back(40); //利用sort算法进行升序(默认) sort(v.begin(), v.end()); for_each(v.begin(), v.end(), print1); //10 20 30 40 50 //for_each的_func 普通函数和仿函数都可以 cout << endl; for_each(v.begin(), v.end(), print2()); //10 20 30 40 50 cout << endl; //改为降序 sort(v.begin(), v.end(), greater<int>()); //可以使用greater 也可以自己写个前数大于后数的仿函数 for_each(v.begin(), v.end(), print2()); //50 40 30 20 10 cout << endl; } int main() { test1(); system("pause"); return 0; }
5.3.2 random_shuffle //洗牌 指定范围内的元素随机调整次序
函数原型:random_shuffle(iterator beg, iterator end);
//用时记得加随机数种子,不然每次洗牌结果都一样
#includeusing namespace std; #include #include #include //常用排序算法 random_shuffle void print1(int val) { cout << val << " "; } void test1() { srand((unsigned int)time(NULL)); vector<int>v; for (int i = 0; i < 10; i++) { v.push_back(i); } //利用洗牌算法 打乱顺序 random_shuffle(v.begin(), v.end()); for_each(v.begin(), v.end(), print1); cout << endl; } int main() { test1(); system("pause"); return 0; }
5.3.3 merge //两个容器合并,并存到另一个容器中
函数原型:merge(iterator beg1, iterator end1,iterator beg2, iterator end2,iterator dest);
//注意:两个容器必须是有序的,beg1(2):容器1(2)开始迭代器 dest:目标容器开始迭代器
#includeusing namespace std; #include #include //常用排序算法 merge void print1(int val) { cout << val << " "; } void test1() { vector<int>v1; vector<int>v2; for (int i = 0; i < 10; i++) { v1.push_back(i); v2.push_back(i + 1); } //目标容器 vector<int>vTarget; vTarget.resize(v1.size() + v2.size()); merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin()); for_each(vTarget.begin(), vTarget.end(), print1); //0 1 1 2 2
3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 cout << endl; } int main() { test1(); system("pause"); return 0; }
5.3.4 reverse //反转指定范围内的元素
函数原型:reverse(iterator beg, iterator end);
#includeusing namespace std; #include #include //常用排序算法 reverse void print1(int val) { cout << val << " "; } void test1() { vector<int>v; v.push_back(10); v.push_back(30); v.push_back(50); v.push_back(20); v.push_back(40); cout << "反转前:"; for_each(v.begin(), v.end(), print1); //10 30 50 20 40 cout << endl; cout << "反转后:"; reverse(v.begin(), v.end()); for_each(v.begin(), v.end(), print1); //40 20 50 30 10 cout << endl; } int main() { test1(); system("pause"); return 0; }