题目:
给定一个整形数组,对这个整形数组排序,使得按序拼接数组各元素得到的值最小。如[3,83,8,13,1]依次该条件排序后后,得到的数组[1, 13, 3, 83,8],此时最小的数为1133838。
<span style="font-size:18px;">var arr=[3,83,8,13,1];
function fn(arr){
var len=arr.length;
//插入排序
for(var i =1; i < len; i++) {
var tmp=arr[i];
var j=i-1;
while(j>=0 && check(arr[j],tmp)){
arr[j+1]=arr[j];
--j;
}
arr[j+1]=tmp;
}
return arr;
}
/**
比较n1,n2判断是否应该交换位置
*返回true,代表需要交换,false不需要交换
**/
function check(n1,n2){
var arr1=(""+n1).split("");
var arr2=(""+n2).split("");
var len1=arr1.length;
var len2=arr2.length;
var i=0;
while(i<len1 && i<len2){
if(arr1[i]>arr2[i]){
return true;
}else if(arr1[i] <arr2[i]){
return false;
}
++i;
}
//取更小的
//判断最长最后一个字符与短的第一个字符大小
if(len1>len2){
return (arr1[len1-1] > arr2[0])?true:false;
}else{
return (arr2[len1-1] > arr1[0])?false:true;
}
}
console.log(fn(arr));</span>