備戰2014筆面試 遞迴的應用 排列組合的實現

2021-09-30 10:36:54 字數 913 閱讀 5202

1.有重複的排列問題

例題:用3,2,1這三個數字組成乙個4位數,數字可以重複。

這裡顯然有3的4次方種可能性,可以用遞迴實現如下:

void quanpailie1(int a,int i,int n)

count++;

cout<

例題有陣列,試輸出該陣列的所有組合。

這裡可得每乙個數均有放入子集和不放入子集兩種情況。

故共有2的n次方種子集(包含空集),若不包含空集則有2的n次方減一種情況

sample input

1 2 3 4

sample output

//這裡a表示的是選擇情況,

//a[i] = 0 表示a2[i]不選擇,a[i] = 1 表示a2[i]選擇

void quanzuhe(int a,int i,int n,int a2)

}

if(num != 0) cout<

例如中選擇三個,可以使用上面的**稍加修改即可實現

//這裡m表示需要從中選擇幾個

void zuhe(int a,int i,int n,int a2, int m)

}if(num == m)

else

//end for

}//end else

} //全排列處理函式

void permutation(char* pstr)

else

} int main()

{ char strsrc = "abc";

permutation(strsrc);

cout<< "共 " << g_scnt << " 種排列!" <

備戰2014筆面試 排序演算法 2

1.堆排序 演算法引出 是簡單選擇排序演算法的改進演算法,簡單選擇排序中每一趟比較選出乙個最小值,但是後一趟的比較中會重複前面的比較結果,存在重複。堆排序對其的改進體現在 每次選擇最小值的同時,根據結果對其他的值進行調整。堆的概念 堆是具有以下性質的完全二叉樹,每個節點都大於或等於左右孩子節點的值,...

快排的非遞迴實現(騰訊面試題)

leader面問了乙個快排的非遞迴實現,一下子蒙了。因為平常從來都是遞迴的快排,當時只想到遞迴變非遞迴肯定要用到棧,但怎麼也想不出來,今天來補一下。先把遞迴的寫一下吧 int partition vector int nums,int left,int right while left right ...

面試題 快排挖坑法的應用

對乙個陣列按照給定的下標進行排序,僅僅使用兩兩交換的方式,要求不能對陣列進行擴容,盡可能少的額外空間。如 原陣列為a,b,c,d,e,現在給定的新位置為3,0,1,4,2,那麼排序後為d,a,b,e,c,void swapsort int parr,int ppos,int n 這是最近看到的一道面...