我试图以递归方式调用函数(用于排序)但是出错了。我试图找到一个解决方案并找到How to call function recursively; 我相应地更改了我的代码,现在它看起来像这样:
$scope.orderCustom = function() {
qS.quickSort($scope.mydata, 0, mydata.length-1);
};
var qS = {
quickSort: function quickSort(data, min, max) {
if (min < max) {
var p = qSP.quickSortPartition(data, min, max);
var newMax = p-1;
var newMin = p+1;
qS.quicksort(data, min, newMax);
qS.quicksort(data, newMin, max);
}
}
};
var qSP = {
quickSortPartition: function quickSortPartition(data, min, max) {
var pivot = data[max].id;
var i = min;
for (var j = min; j <= max; j++) {
if (data[j].id <= pivot) {
var pom = data[j];
data[j] = data[i];
data[i] = pom;
i = i+1;
}
}
var pom = data[i];
data[i] = data[max];
data[max] = pom;
return i;
}
};
我收到错误“错误:qS.quicksort不是函数”。有谁知道如何解决这个问题? 我仍然无法对stackoverflow发表评论,因此我不得不为此打开一个新问题。任何帮助都会得到满足。 Thanx:)
答案 0 :(得分:0)
您不需要提及qS
。
只需quicksort
而不是qS.quicksort
。
答案 1 :(得分:0)
最简单的方法是摆脱额外的包装,只需使用这些功能:
$scope.orderCustom = function() {
quickSort($scope.mydata, 0, mydata.length-1);
};
function quickSort(data, min, max) {
if (min < max) {
var p = quickSortPartition(data, min, max);
var newMax = p-1;
var newMin = p+1;
quickSort(data, min, newMax);
quickSort(data, newMin, max);
}
}
function quickSortPartition(data, min, max) {
var pivot = data[max].id;
var i = min;
for (var j = min; j <= max; j++) {
if (data[j].id <= pivot) {
var pom = data[j];
data[j] = data[i];
data[i] = pom;
i = i+1;
}
}
var pom = data[i];
data[i] = data[max];
data[max] = pom;
return i;
}
请注意,您还必须更正递归调用quickSort
的拼写,因为您使用了所有小写quicksort
。
我认为这只是一个编程练习,因为您可以更好地使用内置sort()
函数的实际代码,或者您可能更喜欢使用orderBy
过滤器。
例如,这与您尝试执行的操作相同:
function compare(a,b) {
if (a.id < b.id)
return -1;
if (a.id > b.id)
return 1;
return 0;
}
$scope.mydata.sort(compare);