資料結構 遞迴(實現n個數的全排列使用C 實現)

2021-10-25 05:39:49 字數 1649 閱讀 3510

如果一種演算法的定義組成如下,則它就是遞迴的。

1、對應於某些引數可以求值的乙個或多個終止條件。

2、 乙個遞迴步驟,它根據先前某次值得求當前值。遞迴步驟最終必須導致終止條件。

折半查詢

折半查詢以指定的鍵值為引數掃瞄含n個元素的有序陣列以查詢於鍵值匹配的值。函式返回匹配值得下標,如果沒有匹配值則返回-1.折半查詢演算法可以用遞迴發描述。

#include

#include

using

namespace std;

// 對陣列

template

<

typename t>

intbinsearch

(t a,

int low,

int high, t key)

// 與表的中點值進行比較,若與key不等,則將表分為兩半,並對相應子表進行折半查詢

else

else

if(key < midvalue)

else}}

// 對容器

template

<

typename t,

typename tt>

intbinsearch

(t a,

int low,

int high, tt key)

// 與表的中點值進行比較,若與key不等,則將表分為兩半,並對相應子表進行折半查詢

else

else

if(key < midvalue)

else}}

intmain()

cout <<

"result = "

<< binsearchdouble

>

,double

>

(vi,

0, vi.

size()

-1,5.0

)<< endl;

return0;

}

經過苦思冥想終於在一天的時間內搞了出來,由於沒有學習過演算法,使得苦逼的自己經歷了一番磨難。

實際上主要原因是對遞迴沒有深入了解,現在把程式貼上在這裡,方便自己隨時檢視,也希望能夠幫助其他人。

#include

#include

using

namespace std;

void

perm

(vector<

int>

&vi, vector<

int>

::iterator begin,

vector<

int>

::iterator end, vectorint>

>

&vvi)

vvi.

push_back

(temp);}

else}}

intmain()

; vectorint>

> vvi;

perm

(vi, vi.

begin()

, vi.

end(

), vvi)

;for

(auto a:vvi)

return0;

}

N個數全排列的非遞迴演算法

n個數全排列的非遞迴演算法 include stdio.h voidswap int a,int b 根據當前的排列p,計算下乙個排列。原則是從1234 4321,若p已經是最後乙個排列,傳回false,否則傳回true。p是乙個n維向量。boolnextpermutation int p,intn...

N個數的全排列

我採用的方法是類似密碼箱的轉輪來得到所有的排列組合 比如求 1,2,3,4的所有排列組合 採用遞減式輪轉來生成 n 4 以1234為初始值 得到如下的所有4個組合,放入最終的容器中 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 n 3 以上面的四個作為初始值,在第三位開始輪轉 得到...

資料結構 實現陣列全排列 c 實現

從n個不同元素中任取m m n 個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的乙個排列。當m n時所有的排列情況叫全排列。當n 1時,那乙個元素只有乙個全排列 當n 1時,考慮以下情況 int arr 對3個數進行全排列 先固定1,對2 3進行全排列 再固定2,對1 3進行全排列...