两个值的数组排序算法。一个下降其他上升。使用Javascript

时间:2014-08-10 04:05:02

标签: javascript arrays algorithm sorting

我在Javascript中有以下数组结构:

var unsorted = [
    {h:50,t:70},
    {h:70,t:60},
    {h:30,t:10},    // Ideal Value (Best combination of t being the least and h being the highest )
    {h:10,t:30},
    {h:2,t:10}
]

我需要以价值" {h:30,t:10}"的方式对其进行排序。 colud在数组的顶部或最后。

我尝试了冒泡排序,但我不知道我应该如何使用两个值。

冒泡排序:

function bubbleSort(a){
var swapped;
    do{
        swapped=false;
        for(var i=0;i<a.length-1;i++){
            var firstValue = parseInt(a[i].h) ;
            var secondValue = parseInt(a[i+1].h) ;
            if( firstValue > secondValue ){
                var temp=a[i];
                a[i]=a[i+1];
                a[i+1]=temp;
                swapped=true;
            }
        }

    } while(swapped);
    return a;
}

除了冒泡排序之外的任何其他方式都可以。

2 个答案:

答案 0 :(得分:2)

您可以使用javascript内置排序功能。

以下是已排序为新排序数组的代码:

var sorted = unsorted.sort(function(a,b) {
    return (a.t-b.t) * 1000 + (b.h-a.h);
});

请注意,这假设您的h中的数字不会大于999,否则您必须将乘数1000增加到更大的值。

以下是javascript排序函数的引用:http://www.w3schools.com/jsref/jsref_sort.asp

答案 1 :(得分:2)

更好的方法是

var sorted = unsorted.sort(function(a, b) { 
    return a.t === b.t ? b.h - a.h : a.t - b.t;
});

这种方式适用于任何大小的th。 (对于NaN和Infinity也优雅地失败了。)