/*
把陣列排成最小的數:
輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接處的所有數字中的最小的乙個。例如
輸入陣列,則列印出這3個數字能排成的最小數字321323
思路:我們應該對於給出的兩個數字m和n,需要確定規則m和n哪個應該排序在前面,而不是比誰大誰小。
m和n能拼成mn或者nm,當mn#include #include #include using namespace std;
const int maxsize = 101;
const int maxlen = 10;
//int compare(const char* str1,const char* str2)
int compare(const void* str1,const void* str2)//qsort比較函式所用形參必須是const void*
void printminnum(int* parr,int ilen)
char** strnumbers = (char**)(new int[ilen]);//經典,這裡定義二級指標,strnumbers是指向字元指標的指標,而字元指標又指向每個字串
for(int i = 0 ; i < ilen ; i++)//對每個字元指標new一下,然後寫入整數
//sort(strnumbers,strnumbers + ilen,compare);//採用我們自定義的比較函式進行比較
qsort(strnumbers,ilen,sizeof(char*),compare);//void qsort(void* buf,size_t num,size_t size,int(*compare)(const void*,const void*)),qsort一半適用於二級字元指標的字元陣列時間比較,sort不行
for(int j = 0 ; j < ilen ; j++)
printf("\n");
for(int k = 0 ; k < ilen ; k++)//注意先刪除一級指標,再刪除二級指標
delete strnumbers;
}void process()
int iarr[maxsize];
for(int i = 0 ; i < n ; i++)
printminnum(iarr,n); }
}int main(int argc,char* argv)
劍指offer 面試題33 把陣列排成最小的數
題目 輸入乙個正整數陣列,把陣列裡面的所有數字連線起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印這三個數字能排成的最小數字321323。基本思想 o nlogn 兩個數字m和n能拼接數字mn和nm。如果mn 如對321和32,排序為32132 32321,所以321 32 ...
劍指Offer之面試題33 把陣列排成最小的數
所有 均通過g 編譯器 測試,僅為練手紀錄。面試題33 把陣列排成最小的數 題目 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出所有數字中最小的乙個。例如輸入陣列 3,32,321 則列印出這 3個數字能排成的最小數字 321323.面試題33 把陣列排成最小的數 題目 輸入乙...
j劍指offer面試題 33 把陣列排成最小的數
輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。思路 可以求出這個陣列中所有數字的全排列,然後把每個排列拼起來,最後求出拼起來的數字的最小值。根絕陣列排列組合的思想,n個數字總共有n!個排列。...