Skip to content

Commit 125ed98

Browse files
committed
Adds compare callback
1 parent 1e9d706 commit 125ed98

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

src/sorting/quicksort/quicksort-middle.js

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
'use strict';
1010

11+
function compare(a, b) {
12+
return a - b;
13+
}
14+
1115
/**
1216
* Quicksort algorithm
1317
*
@@ -27,14 +31,14 @@
2731
* @param {number} right Right part of the array
2832
* @return {number}
2933
*/
30-
function partition(array, left, right) {
34+
function partition(array, left, right, cmp) {
3135
var pivot = array[Math.floor((left + right) / 2)],
3236
temp;
3337
while (left <= right) {
34-
while (array[left] < pivot) {
38+
while (cmp(array[left], pivot) < 0) {
3539
left += 1;
3640
}
37-
while (array[right] > pivot) {
41+
while (cmp(array[right], pivot) > 0) {
3842
right -= 1;
3943
}
4044
if (left <= right) {
@@ -57,22 +61,23 @@
5761
* @param {number} left Left part of the array which should be processed
5862
* @param {number} right Right part of the array which should be processed
5963
*/
60-
function quicksort(array, left, right) {
61-
var mid = partition(array, left, right);
64+
function quicksort(array, left, right, cmp) {
65+
var mid = partition(array, left, right, cmp);
6266
if (left < mid - 1) {
63-
quicksort(array, left, mid - 1);
67+
quicksort(array, left, mid - 1, cmp);
6468
}
6569
if (right > mid) {
66-
quicksort(array, mid, right);
70+
quicksort(array, mid, right, cmp);
6771
}
6872
}
6973

7074
/**
7175
* Quicksort's initial point
7276
* @public
7377
*/
74-
return function (array) {
75-
quicksort(array, 0, array.length - 1);
78+
return function (array, cmp) {
79+
cmp = cmp || compare;
80+
quicksort(array, 0, array.length - 1, cmp);
7681
return array;
7782
};
7883

0 commit comments

Comments
 (0)