首页 新闻 会员 周边

排序问题!!

0
悬赏园豆:20 [已解决问题] 解决于 2017-11-13 15:07

例如有如下一组数字:2, 8, 9, 35, 38, 86, 211, 380, 384, 3856。

问题是:使用 javascript 代码,对这组数字进行排列,要求排列后的数字为这组数字所能组成的数字当中的最大值。(如:6, 68, 634, 6270 这组数字组成的最大数为 6866346270

补充说明:以上数字只作为示例,要求代码可以排列任意一组数字。

js
yamybl的主页 yamybl | 初学一级 | 园豆:77
提问于:2017-11-13 09:46
< >
分享
最佳答案
1

//排列组合
function permutate(array, permutatedArray) {
if (!permutatedArray) {
permutatedArray = [];
}
if (array.length > 1) {
//弹出第一个数
var elementCur = array.shift();
//排列剩余的数组
permutate(array, permutatedArray);
//返回剩余的数组的排列长度
var permutatedArrayLen = permutatedArray.length;
//第一个数与其他剩余数组所有数组组合
for (var j = 0; j < permutatedArrayLen; j++) {
//弹出不齐的组
var p = permutatedArray.shift();
//把当前元素放到排列好的数组的所有位置
for (var i = 0; i <= p.length; i++) {
//复制排列好的数组
var r = p.slice(0);
//插入数据到数组的位置
r.splice(i, 0, elementCur);
//保存
permutatedArray.push(r)
}
}
//退出条件
} else {
permutatedArray.push([array[0]]);
}
return permutatedArray;
}




//排序
function orderBy(arr){
var sort = [];
permutate(arr, sort);

//获取
var max = sort[0].join('');
for(var i = 0; i < sort.length; i++ ){
var item = sort[i].join('');
if(max < item){
max = item;
}
}
return max;
}

var arr = [ 6, 68, 634, 6270];
console.log( orderBy(arr)) //6866346270

收获园豆:15
muamaker | 小虾三级 |园豆:763 | 2017-11-13 11:42

谢谢!代码有点绕,先来研究研究!

yamybl | 园豆:77 (初学一级) | 2017-11-13 15:06

@yamybl: 先排列组合,找到所有的可能,然后再,比较出最大值

muamaker | 园豆:763 (小虾三级) | 2017-11-13 15:22

@muamaker: 原来是这个思路,谢谢了!

yamybl | 园豆:77 (初学一级) | 2017-11-13 15:29
其他回答(2)
0

总长度是一样的.

所以按字符串排序后合并就行了.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-11-13 10:09

你好,首先感谢回复!问题好像没有这么简单,你可以再看看题目,并不是简单的按照大小排列,而是要求这组数字连接后成为这组数字所能组成的最大值。如:6, 68, 634, 6270 这组数字组成的最大数为 6866346270

支持(0) 反对(0) yamybl | 园豆:77 (初学一级) | 2017-11-13 11:06
0

var bubbleSort=function(arr){
for(var i=0;i<arr.length-1;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]<arr[j]){
var temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}

}
}
return arr;
}
var arr = ['225','3','352'];
console.log(bubbleSort(arr));定义为一个字符串数组,排完后合并就行

收获园豆:5
liangzai1996 | 园豆:135 (初学一级) | 2017-11-13 10:55

感谢回复!问题好像要更复杂一些,你可以再看看题目

支持(0) 反对(0) yamybl | 园豆:77 (初学一级) | 2017-11-13 11:09

@yamybl: 我看了,知道你的意思是当第一个数字一样的时候,要比较第二个数,你可以拿这个函数测试一下

支持(0) 反对(0) liangzai1996 | 园豆:135 (初学一级) | 2017-11-13 11:10

哦,这样还有一个问题

支持(0) 反对(0) liangzai1996 | 园豆:135 (初学一级) | 2017-11-13 11:15

@liangzai1996: 谢谢,学习了!不过对于 6, 68, 634, 6270 这组数字排序后还是有点误差,不过还是要谢谢你!

支持(0) 反对(0) yamybl | 园豆:77 (初学一级) | 2017-11-13 11:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册