字典次序:所謂字典次序指兩序列的元素一 一比較直至出現下列情況:
如果兩元素不相等,那麼這兩個元素的比較結果就是整個序列的比較結果;
如果兩個序列的元素數量不同,則元素較少的序列小於另乙個序列;
如果兩個序列沒有更多可以比較的元素,則兩個序列相等。
通俗來講就是 str1 < str2 等價於str1的前k-1個元素與str2的前k-1個元素相等,但str1的第k個元素小於str2的第k個元素,或者str1的元素個數小於str2的元素個數。
全排列:對於乙個含有n個元素的序列,按照一定次序對序列元素進行排列。那麼全排列數為n!。
比如序列的全排列方式共有3!= 6個,分別為,,,,,,這就是乙個字典次序的全排列。
1.標頭檔案
#include
2.函式原型
一般求乙個序列的全排列會要求按照字典次序進行排列,那麼有必要介紹一下接下來的幾個概念:
bool next_permutation(begin, end) //函式會改變[begin,end)區間內元素次序,使它們符合"下一次排列次序",預設為按字典次序公升序
bool next_permutation(begin, end, op) //
op為自定義排列次序
bool prev_permutation(begin, end) //
函式會改變[begin,end)區間內元素次序,使它們符合"上一次排列次序",預設為按字典次序公升序
bool prev_permutation(begin, end, op) //
op為自定義排列次序
詳細說明:
1.next_permutation(begin, end, op )
功能:求當前序列的「下一次排序」,函式值為bool型別,若當前序列不存在下一次排序,返回false;若存在,則返回true,並且改變區間 [begin,end) 的元素次序使之符合「下一次排序」
引數:常用形式為 next_permutation (array, array + size),可以通過設定begin與end的值使之只對序列的子串行進行排列
2.prev_permutation(begin, end, op )
功能求當前序列的「上一次排序」,函式值為bool型別,若當前序列不存在上一次排序,返回false;若存在,則返回true,並且改變區間 [begin,end) 的元素次序使之符合「上一次排序」
引數:常用形式為 prev_permutation (array, array + size),可以通過設定begin與end的值使之只對序列的子串行進行排列
若要實現全排列,首先必須要對初始序列進行排序,使之成為字典次序中的第乙個排列方式或最後乙個排列方式,否則next_permutation() 函式和prev_permutation() 函式只能給出當前序列的下乙個或上乙個。
1.按照字典次序輸出給定字串的全部排列方式
#include #include#include
using
namespace
std;
const
int maxn = 6
;char
arr[maxn];
intmain ()
cout
<}
return0;
}例:輸入:abc
輸出:abc acb bac bca cab cba
//偷懶~~未換行
2.按照字典次序的逆序輸出給定字串的全部排列方式
#include #include#include
using
namespace
std;
const
int maxn = 6
;char
arr[maxn];
bool compare (char a, char
b)int
main ()
cout
<}
return0;
}例:輸入:abc
輸出:cba cab bca bac acb abc
//偷懶~~未換行
3.未對初始序列排序,依次求下一次排列
#include #include#include
using
namespace
std;
const
int maxn = 6
;char
arr[maxn];
intmain ()
cout
<}
return0;
}例:輸入:bac
輸出:bac bca cab cba
//偷懶~~未換行
4.未對初始序列排序,依次求上一次排列
#include #include#include
using
namespace
std;
const
int maxn = 6
;char
arr[maxn];
intmain ()
cout
<}
return0;
}例:輸入:bac
輸出:bac acb abc
//偷懶~~未換行
5.利用自定義排序方式,和 next_permutation 實現字典次序逆序
#include #include#include
using
namespace
std;
bool compare (char a, char
b)int
main ()
; cout
<< arr
cout
}結果依次為:
cbacab
bcabac
acbabc
6.利用自定義排序方式,和 prev_permutation 實現字典次序
#include #include#include
using
namespace
std;
bool compare (char a, char
b)int
main ()
; cout
<< arr
cout
}結果依次為:
abcacb
bacbca
cabcba
7.對序列的子串行進行排列
#include #include#include
using
namespace
std;
intmain ()
; cout
<< arr
cout
}結果依次為:
abcde
acbde
bacde
bcade
cabde
cbade
C C C 標準庫函式之排列函式
字典次序 所謂字典次序指兩序列的元素一 一比較直至出現下列情況 如果兩元素不相等,那麼這兩個元素的比較結果就是整個序列的比較結果 如果兩個序列的元素數量不同,則元素較少的序列小於另乙個序列 如果兩個序列沒有更多可以比較的元素,則兩個序列相等。通俗來講就是 str1 str2 等價於str1的前k 1...
C 標準庫函式
有許多不同的案件中,陣列排序的可能是有用的。演算法 如搜尋看看一些存在於乙個陣列 通常可以變得更簡單和 或更有效時,輸入的資料進行排序。此外,排序是非常有用的可讀性,如當列印列表按字母順序排列的名字。排序通常是通過反覆比較的陣列元素對進行的,和交換他們如果他們滿足一些標準。為了在這些元素進行比較根據...
C 標準庫函式
c 程式通常可以呼叫標準c 庫中的大量函式。這些函式完成一些基本的服務,如輸入和輸出等,同時也為一些經常使用的操作提供了高效的 實現 這些函式中含有大量的函式和類定義,以幫助程式設計師更好地使用標準c 庫。標準c 庫包含以下內容 和 標準c 庫的詳細訊息均在其對應的標頭檔案進行了說明。主要標準c 庫...