数组排成最小的数
文章目录
//把数组中数字拼接起来,并打印最小的和
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
// int型整数用十进制表示最多只有10位
const int g_MaxNumberLength=10;
char* g_StrCombine1=new char[g_MaxNumberLength*2+1];
char* g_StrCombine2=new char[g_MaxNumberLength*2+1];
// 如果[strNumber1][strNumber2] > [strNumber2][strNumber1], 返回值大于0
// 如果[strNumber1][strNumber2] = [strNumber2][strNumber1], 返回值等于0
// 如果[strNumber1][strNumber2] < [strNumber2][strNumber1], 返回值小于0
int compare(const void* strNumber1,const void* strNumber2){//比较mn VS nm
strcpy(g_StrCombine1,*(const char**)strNumber1);
strcat(g_StrCombine1,*(const char**)strNumber2);
strcpy(g_StrCombine2,*(const char**)strNumber2);
strcat(g_StrCombine2,*(const char**)strNumber1);
return strcmp(g_StrCombine1,g_StrCombine2);
}
void PrintMinNumber(int *numbers,int length){
if(numbers==NULL||length<0)
return ;
char** strNumbers=(char**)(new int[length]);
for(int i=0;i<length;i++){
strNumbers[i]=new char[g_MaxNumberLength+1];
sprintf(strNumbers[i],"%d",numbers[i]);
//数值转换为字符串,比如numbers存储的是{3,32,321},那么//strNumber存储的是{"3","32","321"}
}
qsort(strNumbers,length,sizeof(char*),compare);//对字符串数组进行排序,由小到大
for(int i=0;i<length;i++)
printf("%s",strNumbers[i]);
printf("\n");
for(int i=0;i<length;i++)
delete[] strNumbers[i];
delete[] strNumbers;
}
int main()
{
int a[]={3,32,321};
PrintMinNumber(a,3);
return 0;
}