詳細(xì)聊一聊algorithm中的排序算法
前言
雨下不停,愛意難眠,說一下algorithm中的幾個(gè)排序算法吧,干什么總要排個(gè)序吧,有單純排序的算法題可以看一下,我寫的碼神說排序算法不多說了,來看吧,系好安全帶,發(fā)車了!
一、algorithm是什么?
如果說algorithm是個(gè)什么東西的話,百度百科是這樣說的,算法(algorithm),也如其名,這就是一個(gè)算法的頭文件,如果展開了來說的話,可能國慶假期都不夠我寫的,所以說本文我們主要來說algorithm中的排序算法
二、有哪些排序算法?
大致我想到的是以下的幾個(gè)排序算法,歡迎補(bǔ)充
- sort
- random_shuffle
- merge
- reverse
sort
根據(jù)使用的優(yōu)先級(jí)來說的話,sort是在開發(fā)或者競賽中都比較常用的排序算法,在默認(rèn)的情況下,他是從小到大的排序,先來看他的默認(rèn)情況吧。
#include<iostream>
#include<cstdio>
#include<vector>//用vector容器來存儲(chǔ)
#include<algorithm>//算法頭文件
using namespace std;
void myprint(int rel)
{
cout << rel;
}
void test01()
{
vector<int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
//插入
sort(v.begin(), v.end());
//從小到大
for_each(v.begin(), v.end(), myprint);
//遍歷輸出
}
int main()
{
test01();
return 0;
}
實(shí)現(xiàn)sort從大到小的排序算法有以下倆種
sort(v.begin(), v.end(), greater<int>());
//用greater,其中g(shù)reater表示內(nèi)置類型從大到小排序,
//less表示內(nèi)置類型從小到大排序。
//自定義函數(shù)來進(jìn)行輸出
bool getor(int v1, int v2)
{
return v1 > v2;
}
sort(v.begin(), v.end(), getor);
random_shuffle
random隨機(jī)的,從名字我們可以猜出,這是一個(gè)打亂排好的序,從而實(shí)現(xiàn)隨機(jī)的算法,我也喜歡把它看成一個(gè)洗牌的過程,故曰:洗牌排序,看一下實(shí)現(xiàn)吧。
//洗牌排序,打亂隨機(jī)分配
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
void myprint(int val)
{
cout << val << " ";
}
void test01()
{
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(), myprint);
}
int main()
{
test01();
return 0;
}
merge
作用:倆個(gè)容器合并,并存儲(chǔ)到另外一個(gè)容器中
條件:
1.倆個(gè)容器必須是有序的,所以可以用sort排序,排一下序
2.記得要給一個(gè)新數(shù)組分配內(nèi)存
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
void myprint(int val)
{
cout << " " << val;
}
void test01()
{
vector<int>v;
vector<int>v1;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
v1.push_back(i + 1);
}
vector<int>vTarget;
//歸并
//要提前分配內(nèi)存
vTarget.resize(v.size() + v1.size());
merge(v.begin(), v.end(), v1.begin(), v1.end(), vTarget.begin());
for_each(vTarget.begin(), vTarget.end(), myprint);
}
int main()
{
test01();
return 0;
}
reverse
反轉(zhuǎn),正好用它再來輸出一次從大到小的排序
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
void myprint(int val)
{
cout << " " << val;
}
void test01()
{
vector<int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
reverse(v.begin(), v.end());
for_each(v.begin(), v.end(),myprint);
}
int main()
{
test01();
return 0;
}
總結(jié)
我能在algorithm中想到的排序函數(shù)就這些了,如果缺少哪些,歡迎補(bǔ)充,碼神與你們一起變強(qiáng),一起去new一個(gè)對(duì)象出來
到此這篇關(guān)于algorithm中排序算法的文章就介紹到這了,更多相關(guān)algorithm排序算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解C語言中的wait()函數(shù)和waitpid()函數(shù)
這篇文章主要介紹了C語言中的wait()函數(shù)和waitpid()函數(shù),注意其在中斷進(jìn)程方面用法的不同,需要的朋友可以參考下2015-08-08
C語言實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
C++面向?qū)ο笾惡蛯?duì)象那些你不知道的細(xì)節(jié)原理詳解
C++是面向?qū)ο缶幊痰?這也是C++與C語言的最大區(qū)別,下面這篇文章主要給大家介紹了關(guān)于C++面向?qū)ο笾惡蛯?duì)象的細(xì)節(jié)原理的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05

