算法题:把数组排成最小的数,输入一个正整数数组,把数组里所有的数字拼接起来排成一个数,打印拼接出来的所有的数字中的最小的一个。例如输入数组{3,,32,,321},则打印出这3个数字能排成的最小数字是321323;
const int MaxNumberLength = 10;
char *StrCombine1 = new char[MaxNumberLength*2+1];
char *StrCombine2 = new char[MaxNumberLength*2+1];
int compare(const void* StrNum1,const void* StrNum2)
{
strcpy(StrCombine1,*(const char**)StrNum1);
strcat(StrCombine1,*(const char**)StrNum2);
strcpy(StrCombine2,*(const char**)StrNum2);
strcat(StrCombine2,*(const char**)StrNum1);
return strcmp(StrCombine1,StrCombine2);
}
void PrintMinNum(int *numbers,int length)
{
if(numbers==NULL|| length<=0)
return;
char** StrNum = (char**)(new int[length]);//注意此处的定义
for(int i = 0;i<length;i++)
{
StrNum[i] = new char[MaxNumberLength+1];
sprintf(StrNum[i],"%d",numbers[i]);
}
qsort(StrNum,length,sizeof(char*),compare);
for(int i = 0;