🎉welcome🎉
✒️博主介绍:一名大一的智能制造专业学生,在学习C/C++的路上会越走越远,后面不定期更新有关C/C++语法,数据结构,算法,Linux,ue5使用,制作游戏的心得,和大家一起共同成长。
✈️C++专栏:C++爬塔日记
😘博客制作不易,👍点赞+⭐收藏+➕关注
前情回顾
在上一块石碑中,我学到了,同时下一块石碑也显露出来…
- 🚄上章地址:第九层(12):STL之常用查找算法
常用排序算法
- 常用的排序算法有有四种
sort//排序算法,对容器内的元素进行排序
random_shuffle//对于指定范围内的元素进行随机打乱
merge//将两个元素合并放到另一个容器当中
reverse//反转指定区间内的元素
sort
- sort是最常用的排序算法,它可以排序任何类型,对于内置类型可以直接排序,对于自定义类型要指定规则,可以利用仿函数或者函数(两者都必须是谓词),也可以利用谓词去改变排序规则,sort的默认规则是从小到大
sort(beg,end,_pred)
- beg是要排序区间的开始迭代器,end为结束迭代器,_pred为谓词,可以写,也可以不写,默认从小到大进行排序
使用:
#include<iostream>
using namespace std;
#include<algorithm>
bool _sort(int a, int b)
{
return a > b;
}
void test1()
{
int arr[10] = { 0,5,3,4,6,9,2,1,7,8 };
cout << "排序前:" << endl;
for (int i = 0; i < sizeof(arr) / sizeof(int); i++)
{
cout << arr[i] << " ";
}
cout << endl;
sort(arr, arr+sizeof(arr)/sizeof(int));
cout << "排序后:" << endl;
for (int i = 0; i < sizeof(arr) / sizeof(int); i++)
{
cout << arr[i] << " ";
}
cout << endl;
sort(arr, arr + sizeof(arr) / sizeof(int),_sort);
cout << "升序排序后:" << endl;
for (int i = 0; i < sizeof(arr) / sizeof(int); i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
int main()
{
test1();
return 0;
}
random_shuffle
- random_shuffle可以去打乱指定范围内的元素,随机打乱,但是又缺点,就和rand一样,它的随机不是完全随机的,在程序第一次运行起来,这个随机就定下来了,所以想让random_shuffle真正随机起来,需要借助时间戳和srand
random_shuffle(beg,end);
- beg是要打乱区间的开始迭代器,end为结束迭代器
使用:
#include<iostream>
using namespace std;
#include<algorithm>
#include<ctime>
void test1()
{
srand((unsigned int)time(NULL));
int arr[10] = { 0,5,3,4,6,9,2,1,7,8 };
cout << "打乱前:" << endl;
for (int i = 0; i < sizeof(arr) / sizeof(int); i++)
{
cout << arr[i] << " ";
}
cout << endl;
random_shuffle(arr, arr + sizeof(arr) / sizeof(int));
cout << "打乱后:" << endl;
for (int i = 0; i < sizeof(arr) / sizeof(int); i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
int main()
{
test1();
return 0;
}
merge
- merge的主要作用是合并两个容器,成为一个新的容器,这里要注意,容器内元素必须有序,而且在给新容器放元素之前,要提前开辟好空间并且空间要足够大
merge(beg1,end1,beg2,end2.dest);
- beg1是容器1的开始迭代器,end1为容器1的结束迭代器,beg2为容器2的开始迭代器,end2是容器2的结束迭代器,dest为存放容器的开始迭代器
使用:
#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>
void print(vector<int>& a)
{
for (auto b = a.begin(); b < a.end(); b++)
{
cout << *b << " ";
}
cout << endl;
}
void test1()
{
vector<int> a, b;
for (int i = 0; i < 10; i++)
{
a.push_back(i);
b.push_back(i + 1);
}
print(a);
print(b);
vector<int> c;
c.resize(a.size() + b.size());
merge(a.begin(), a.end(), b.begin(), b.end(), c.begin());
print(c);
}
int main()
{
test1();
return 0;
}
- 可以发现是直接排序好的,可以用于归并排序归并部分
reverse
- reverse的作用是逆序容器内的元素
reverse(beg,end);
- beg是要逆序区间的开始迭代器,end为结束迭代器
使用:
#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>
void print(vector<int>& a)
{
for (auto b = a.begin(); b < a.end(); b++)
{
cout << *b << " ";
}
cout << endl;
}
void test1()
{
vector<int> a;
for (int i = 0; i < 10; i++)
{
a.push_back(i);
}
cout << "逆序前" << endl;
print(a);
reverse(a.begin(), a.end());
cout << "逆序后" << endl;
print(a);
}
int main()
{
test1();
return 0;
}
下一座石碑
- 这座石碑倒下了,露出了下一座石碑…
😘预知后事如何,关注新专栏,和我一起征服C++这座巨塔
🚀专栏:C++爬塔日记
🙉都看到这里了,留下你们的👍点赞+⭐收藏+📋评论吧🙉