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 這是最近看到的一道面...