条目为> = 10时,javaScript快速排序无法正常工作

时间:2013-12-28 16:29:32

标签: javascript arrays sorting quicksort

我有一张桌子,我想用一个字段对它进行排序。但是,我需要携带另一个字段,它将提供交换表条目所需的数据。它可以工作,但是当我们排序的字段的值为10时(这可能是条目> = 10的问题),它将10解释为1,从而对数据集的结果进行排序10 8 5 9到9 8 5 10。 我无法弄清楚发生了什么!你能? :)

解决方案(由Vache提供) 问题是要排序的数组条目是字符串而不是整数!我用jQuery和.text()收集数组的条目。另外我需要使用parseInt()将字符串转换为整数。

/** 
 * Will swap two table entries 
 * @param a - name of first player
 * @param b - name of second player
 */
function swapEntries(a, b)
{
    var editor = $("#" + a);  //put your ids here
        var viewer = $("#" + b);

    editorContent = editor.clone();
        viewerContent = viewer.clone();

    editor.replaceWith(viewerContent);
        viewer.replaceWith(editorContent);
}

/** 
 * Will swap two array cells
 * @param ar - array
 * @param a - first cell's index
 * @param b - second cell's index
 */
function swap(ar, a, b)
{
    var temp = ar[a];
    ar[a] = ar[b];
    ar[b] = temp;
}

/**
 * Quicksort.
 * @param a - The array to be sorted.
 * @param first - The start of the sequence to be sorted.
 * @param last - The end of the sequence to be sorted.
 * @param names - Array of names.
 */
function quickSort( a, first, last, names ) 
{
    var pivotElement;
    if(first < last)
    {
        pivotElement = pivot(a, first, last, names);
        quickSort(a, first, pivotElement-1, names);
        quickSort(a, pivotElement+1, last, names);
    }
}



/**
 * Find and return the index of pivot element.
 * @param a - The array.
 * @param first - The start of the sequence.
 * @param last - The end of the sequence.
 * @param names - Array of names.
 * @return - the pivot element.
 */
function  pivot( a, first, last) 
{
    var p = first;
    var pivotElement = a[first];

    for(var  i = first+1 ; i <= last ; i++)
    {
        if(a[i] > pivotElement)
        {
            p++;
            swap(a, i, p);
         swapEntries(names[i], names[p]);
         swap(names, i, p);
        }
    }

    swap(a, p, first);
    swapEntries(names[p], names[first]);
    swap(names, p, first);

    return p;
}

1 个答案:

答案 0 :(得分:2)

没有看到数组,你的问题可能就是你的数字实际上是字符串。

使用JavaScript处理排序方式

>>> "10" > "2"
false
>>> 10 > 2
true

另外值得注意的是,只要您的某个操作数是数字,就会进行转换以进行数字比较。所以,

>>> "10" > 2
true
>>> 10 > "2"
true