題目:輸入一個正整數組,將它們連接起來排成一個數,輸出所能排出的所有數字中最小的一個。
例如輸入數組{32,321},則輸出這兩個能排成的最小數字32132.
分析:這是一道非降排序問題,比較規則如下:
1、如果a,b位數相等,如12與31,則可直接比較大小。12<31,排序後結果爲1231。
2、如果a,b位數不等。考慮如下三種情況:
a、31與312。大小爲31>312,排序結果爲31231
b、31與313。大小爲31=313,排序結果爲31313或者31331
c、31與314。大小爲31<314,排序結果爲31314
由上可以得知,a與b位數不等的時候,假如a爲位數少,則爲了對齊比較,補齊a後面缺少位數,用a的高位循環填充。然後比較a與b的大小關係。如31與31315比較,31位數小,則用31的高位循環補齊,爲31313,然後比較31313與31315。大小爲31313<31315,結果爲3131315。對於b來說,如果31=313,那麼再比較31與13的大小。
3、對於兩個數已經說明結果,對於數組多於兩個數時,可以採用數學歸納法來證明非降排序的正確性。
C/C++源碼: