现有一个数组int a[]={32,3,65};我们将这个数组中的所有数字进行排序
#include<iostream>
using namespace std;
//把数组排成最小的数
int a[]={2,56,1};
char tmp[256]={0};
char dst[256]={0};
void pailie(char* pstr,char*begin)
{
if(*begin=='\0')
{
memset(tmp,0,256);
for(int i=0;i<sizeof(a)/sizeof(int);i++)
{
char num[256]={0};
sprintf(num,"%d",a[*(pstr+i)-48]);
strcpy(tmp+strlen(tmp),num);
}
if(strcmp(dst,tmp)>0)
{
memset(dst,0,256);
strcpy(dst,tmp);
}
}
else
{
for(char* str=begin;*str!='\0';str++)
{
char tmp=*str;
*str=*begin;
*begin=tmp;
pailie(pstr,begin+1);
tmp=*str;
*str=*begin;
*begin=tmp;
}
}
}
int main()
{
int length=sizeof(a)/sizeof(int);
char* pstr=new char[length+1];
memset(pstr,0,length+1);
memset(pstr,'0',length);
//初始化dst
for(int i=0;i<length;i++)
{
char Nustr[256]={0};
sprintf(Nustr,"%d",a[i]);
strcpy(dst+strlen(dst),Nustr);
pstr[i]+=i;
}
pailie(pstr,pstr);
cout<<dst<<endl;
return 0;
}
这个过程利用了将数字转换为字符进行对比的较好的方式,同时也不用判断溢出等,是一种较好的方法啊