问题描述:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。
- #include <iostream>
- #include <string>
- #include <sstream>
- #include <algorithm>
- using namespace std;
- bool compare(const string& str1, const string &str2)
- {
- string s1=str1+str2;
- string s2=str2+str1;
- return s1<s2;
- }
- void ComArrayMin(int *pArray, int num)
- {
- int i;
- string *pStrArray=new string[num];
- for(i=0; i<num; i++)
- {
- stringstream stream;
- stream<<pArray[i];
- stream>>pStrArray[i];
- }
- sort(pStrArray, pStrArray+num, compare);
- for(i=0; i<num; i++)
- cout<<pStrArray[i];
- cout<<endl;
- delete[] pStrArray;
- }
- void main()
- {
- int Num;
- cin>>Num;
- int *pArray=new int[Num];
- for(int i=0; i<Num; i++)
- cin>>pArray[i];
- ComArrayMin(pArray, Num);
- }