残念ながら、これまで自分でコーディングしたことはありません。私の実装は、「日付」フィールドのソートに基づいてカスタムクラスで動作します。はい、組み込みのJavascriptソートを使用してコンパレータ関数を指定できることを十分に認識していますが、それは私が興味を持っていることではありません。
現在、逆ソートされたリストから始めて、「target_sort」(QuickSort)を呼び出した後、あまりよくソートされていないリストを取得します。
コード:
function target_sort_wrapper(array) {
target_sort(array, array.length, 0, array.length);
}
//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);
target_sort(array, pivotIndex, 0, pivotIndex - 1);
target_sort(array, pivotIndex, pivotIndex + 1, array.length);
}
function partition(array, pivotIndex, left, right) {
//first, put the pivot as the first element to make things easier
array.swap(pivotIndex, 0);
var pivot = array[0];
var i = left + 1;
for (var j = left + 1; j < right; j++) {
if (dateValue(array[j].date) < dateValue(pivot.date)) {
//dateValue converts stuff like "Jun18" into 618, to numerically compare
array.swap(i, j);
i = i + 1;
}
}
//don't forget to put pivot back where it belongs
array.swap(left, i - 1);
}
function choosePivot(array, length) {
return Math.floor(Math.random() * length); //0 (inclusive) to length (exclusive)
}
Array.prototype.swap = function (i, j) {
var temp = this[i];
this[i] = this[j];
this[j] = temp;
return this;
}
そして、これが出力です。最初に逆ソートされたリストが出力され、次に「target_sort」の結果が出力されます。
Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19
=============================================================
Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun25 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun19 Jun25 Jun25 Jun25 Jul05 Jun25 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul05 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jun25 Jul06 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jun25 Jul06 Jul06 Jun25 Jul06 Jun25 Jun25 Jun25 Jun25 Jul05 Jun25 Jul05 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul06 Jul05 Jul05 Jul05 Jul06
そこに到達しているような気がしますが、まだ何かがおかしいです。
私はこれに数日間立ち往生しているので、助けてくれてありがとう。
乾杯。