获得一个数组中所有元素进行的全排列,获得其中最小的数字

来源:互联网 发布:上海优化公司hxwlkj 编辑:程序博客网 时间:2024/06/05 21:11

现有一个数组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);//初始化dstfor(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;}

这个过程利用了将数字转换为字符进行对比的较好的方式,同时也不用判断溢出等,是一种较好的方法啊

0 0
原创粉丝点击