将一个数组中的各个元素拼接组合,得到数字最大的组合。
如:int[] arr = new int[5] {1, 26, 56, 894, 5648};
拼接组合后最大的数为 894565648261 --> 894 56 5648 26 1 的拼接结构
public string GetArraySortMaxNumber (int[] nums) {
int temp;
for (int i = 1; i < nums.Length; i++) {
temp = nums[i];
for (int j = i - 1; j >= 0; j--) {
bool insert = true;
string a = nums[j].ToString ();
string b = temp.ToString ();
//36 365 -- 36 367
//10 -- 1001
//1 -- 12
//特殊情况(处理如下)
//补齐短的数字至和长的数字长度相同,补上的数字为短的数字的*第一个*数字(纠正之前[最后一位]的错误)
if (a.Length > b.Length) {
b = AddLastStr (a, b);
} else if (a.Length < b.Length) {
a = AddLastStr (b, a);
}
for (int x = 0; x < a.Length; x++) {
int aNum = a[x];
int bNum = b[x];
if (bNum > aNum)
insert = false;
else if (bNum < aNum)
break;
}
//使用插入排序
if (!insert) {
nums[j + 1] = nums[j];
if (j == 0) {
nums[0] = temp;
break;
}
} else {
nums[j + 1] = temp;
break;
}
}
}
string result = string.Empty;
foreach (var item in nums) {
result += " " + item;
}
return result;
}
private string AddLastStr(string max, string min)
{
int dif = max.Length - min.Length;
//取短的数的第一个数字
string addStr = min.Substring(0, 1);
for (int k = 0; k < dif; k++)
min += addStr;
//Debug.Log(min);
return min;
}