(四)連接成最小數字

題目:輸入一個正整數組,將它們連接起來排成一個數,輸出所能排出的所有數字中最小的一個。

例如輸入數組{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++源碼:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章