0

私が持っているカスタムデータ構造を操作するために、独自のカスタムクイックソートルーチンを作成しました。通常のクイックソートと同じように機能するはずですが、比較のために特別な関数を使用して文字列を数値に変換する必要があります。

とにかく、Firefox が「再帰エラーが多すぎる」と言うので、何か間違ったことをしたに違いありません。

コードは次のとおりです。

//Will be called on various buckets to sort by dates
function target_sort_wrapper(array) {
    target_sort(array, array.length, 0, length-1);
}

//Quicksort to swap around targets based on dates
//"array" is DDATA, where DDATA[i] are targets
function target_sort(array, length, left, right) {
    if (length < 2) return;
    var pivotIndex = choosePivot(array, length); //returns the index
    partition(array, pivotIndex, left, right);
    //recursive calls now - left then right
    target_sort(array, pivotIndex, 0, pivotIndex - 1);
    target_sort(array, array.length - (pivotIndex+1), pivotIndex+1, array.length - 1);
}

function partition(array, pivotIndex, left, right) {
    //first, put the pivot as the first element to make things easier
    swap(array, pivotIndex, 0);
    var pivot = array[0];
    var i = left + 1; 
    for(var j = left + 1; j < right; j++) {
        //if (array[j] > pivot) { } //do nothing, satisfies invariant
        if (dateValue(array[j].date) < dateValue(pivot.date)) {
            swap(array, i, j);
            i = i + 1; 
        }
    }
}

function choosePivot(array, length) {
    return Math.floor(Math.random() * length); //0 (inclusive) to length (exclusive) 
}

function swap(arr, i, j) {
    var temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

助けてくれてありがとう。

4

1 に答える 1

1

カスタムソートを行うには、「比較機能」を使用できます。見てください:

良い質問がありますが、ソートアルゴリズムを実装したり、心配したりする必要はありません。私が言ったことを使用してください。

于 2012-07-23T21:24:52.023 に答える