把数组排成最小的数

题目:输入一个正整数数组,把数组里的所有数字拼接起来排成一个数,打印出能拼接处的所有数字中最小的一个,例如,输入数组,{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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值