题目:输入一个正整数数组,把数组里的所有数字拼接起来排成一个数,打印出能拼接处的所有数字中最小的一个,例如,输入数组,{32,321},则打印出这个3个数字能排成的最小数字32132.
通过比较组合的字符串的大小来排序原来的整数数组,例如 32和321比较的结果是 ”32321“>"32132" 所以认为 32是大于321的。
废话不多说,见代码, 总感觉代码不够优雅,主要是整数转字符串的时候字符串的长度不好确定~~~~
#include <stdio.h>
#include <stdlib.h>
int compare2int(int a,int b){//比较字符串a+b与b+a的大小
char s1[5],s2[5],tmp1[10];
sprintf(s1,"%d",a);
sprintf(tmp1,"%d",a);
sprintf(s2,"%d",b);
strcat(tmp1,s2);
strcat(s2,s1);
int result=strcmp(tmp1,s2);
return result;
}
void bubbleSort(int a[],int len){
int tmp;
for(int i=0;i<len;i++){
for(int j=i;j<len-1;j++){
if(compare2int(a[j],a[j+1])==1){//比较的方式不一样而已
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
for(int k=0;k<len;k++){
printf("%d ",a[k]);
}
printf("\n");
}
int main()
{
int test[]={1,4,5,45,453,2132,787};
bubbleSort(test,7);
return 0;
}