請編寫程式輸出前n個正整數的全排列(n<10),並通過9個測試用例(即n從1到9)觀察n逐步增大時程式的執行時間。
輸入給出正整數n(<10)。
輸出1到n的全排列。每種排列佔一行,數字間無空格。排列的輸出順序為字典序,即序列a1,a2,⋯,an排在序列b1,b2,⋯,bn之前,如果存在k使得a1=b1,⋯,ak=bk並且 ak+1
< bk+1。
3
123
132213
231312
321
全排列生成演算法
所謂字典序,就是將元素按照字典的順序(a-z,1-9)進行排列。strcmp
就是以字典序來比較字串。
設p是集合
\ 的乙個全排列:p0p1…pj-1pjpj+1…pn
集合必須按照遞增順序排列好從下標
n
開始遞減,找出第乙個比右邊數字小的數字序號i
p
i +1 p_ipi +1在pi右邊的數字裡,找到所有比pj大的數字中最小的數字pk,即 k =min k=\min\ k=min交換pi,pj 將 c++**如下i
右邊的序列pi+1pi+2…pn逆置,變為pnpn-1…pi+1#include
#include
intfact
(int n )
;void
dictseq
(int a,
int n )
;void
reverse
(int a,
int n,
int j )
;void
swaq
(int
&a,int
&b )
;void
print_array
(int a,
int n )
;int
main
(void
)int total =
fact
(n);
//全排列個數等於n!
print_array
( a, n )
;//初始序列算一種排列, 在交換之前單獨輸出
for(
int i =
1; i < total; i++
)return0;
}void
dictseq
(int a,
int n )
}int min_j = i +1;
int min = a[min_j]
;for
(int j = min_j; j < n; j++)}
swaq
( a[min_j]
, a[i]);
reverse
( a, n, i )
;print_array
( a, n );}
void
reverse
(int a,
int n,
int i )
}int
fact
(int n )
while
( n >0)
;return fact;
}void
swaq
(int
&a,int
&b )
void
print_array
(int a,
int n )
printf
("\n");
}
資料結構 鍊錶PTA習題
6 3 建立學生資訊鍊錶 20分 6 4 學生成績煉表處理 20分 題號題目答案1 結點的單鏈表中,實現下列哪個操作,其演算法的時間複雜度是o n 遍歷鍊錶和求鍊錶的第i個結點 2對於乙個具有n個結點的單鏈表,在給定值為x的結點後插入乙個新結點的時間複雜度為 o n 3線性表若採用鏈式儲存結構時,要...
PTA資料結構習題(浙江大學)
感謝疫情期間pta開放免費練習,趁著這個機會補一下資料結構的代 include include include struct stud node struct stud node createlist struct stud node deletelist struct stud node head...
pta資料結構
是否二叉搜尋樹 這題只要是了解二叉查詢樹的特點。bool isbst bintree t while right1 return isbst t left isbst t right 線性探測法的查詢函式 主要注意雜湊函式,這裡那個常量是真的坑,卡了半天。position find hashtabl...