algorithm

algorithm:算法。裏面有着許許多多的黑科技。一個一個來看


1:algorithmの全排列

說到全排列,恐怕想起的就是那搜索了。那麼,algorithm庫裏還有一個神♂ 奇的東西叫next_permutation,即是生成全排列的函數。它內部實現是用生成法實現的,所以速度>搜索的速度。
格式:next_permutation(起始位置,結束位置);

關於int的next_permutatione

int a[101];
for(int i=1;i<=5;i++) a[i]=i;
do
{
    for(int i=1;i<=5;i++) cout<<a[i]<<" ";
    cout<<endl;
}while(next_permutation(a+1,a+1+5));//生成1-5的全排列

關於string的next_permutation

string s="aacc";
do
{
    cout<<s<<endl;
}
while(next_permutation(s.begin(),s.end()));//產生"aacc"的全排列

trip:next_permutation可以處理重複元素的全排列喲!例如aacc


2:algorithmのsort

排序有很多種做法。比如冒泡啊、選擇啊、並歸呀等等。但是目前公認爲在一般情況下綜合性最強的就是快排(快速排序)。在C++中,STL已經封裝好了一個東西叫sort,那麼那麼好的東西怎麼可以不掌握呢?
格式:sort(起始位置,結束位置,規則);

關於系統默認排序規則的sort

int a[101];
for(int i=1;i<=10;i++) a[i]=i;

sort(a+1,a+1+10);   //不加規則域的時候,默認從小->大
for(int i=1;i<=10;i++) cout<<a[i]<<" "; cout<<endl;

sort(a+1,a+1+10,less<int>());   //加此規則後,變爲從小->大。等價於不加
for(int i=1;i<=10;i++) cout<<a[i]<<" "; cout<<endl;

sort(a+1,a+1+10,greater<int>());    //加此規則後,變爲從大->小
for(int i=1;i<=10;i++) cout<<a[i]<<" "; cout<<endl;

關於自定義排序規則的sort

struct Stu{int dis,num;}a[101];//記得要全局
sort(a+1,a+1+10,cmp);   //cmp爲一個自定義的函數,作爲排序的規則
                        //一般用自定義規則,多是用於結構體。
                        //記住,函數類型是bool
for(int i=1;i<=10;i++) cout<<a[i].num<<" "; cout<<endl;

//cmp函數內容如下
bool cmp(Stu a,Stu b)
{
    return a.dis>b.dis;//規則:dis越大的,排前面
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章