C 標準庫函式之排列函式

2022-07-22 06:45:11 字數 3885 閱讀 8828

字典次序:所謂字典次序指兩序列的元素一 一比較直至出現下列情況:

如果兩元素不相等,那麼這兩個元素的比較結果就是整個序列的比較結果;

如果兩個序列的元素數量不同,則元素較少的序列小於另乙個序列;

如果兩個序列沒有更多可以比較的元素,則兩個序列相等。

通俗來講就是 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 庫...