【发布时间】:2012-07-23 04:53:17
【问题描述】:
不幸的是,我以前从未亲自编写过此代码。我的实现在基于对“日期”字段进行排序的自定义类上运行。是的,我完全知道我可以使用内置的 Javascript 排序并指定比较器函数,但这不是我感兴趣的。
目前我从一个反向排序的列表开始,然后在调用我的“target_sort”(快速排序)之后,我得到一个排序不太好的列表。
代码:
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
我觉得它快到了,但仍有一些问题。
我已经被困了几天了,非常感谢您的帮助。
干杯。
【问题讨论】:
-
您可以在 codereview 查看此代码。
-
什么是代码审查?是不是更适合问我的问题?
-
确保合并按预期进行。
-
@YoungMoney 是的。他们可以在那里验证您的代码。 codereview.stackexchange.com
-
@Desolator:CodeReview 适用于您希望查看是否可以改进的工作代码。这段代码不工作,所以 StackOverflow 是它的合适站点。
标签: javascript algorithm sorting quicksort