Skip to content

Commit

Permalink
join array sorting in one method
Browse files Browse the repository at this point in the history
  • Loading branch information
zloirock committed Dec 19, 2023
1 parent 78829d1 commit d5ee26e
Showing 1 changed file with 30 additions and 33 deletions.
63 changes: 30 additions & 33 deletions packages/core-js/internals/array-sort.js
@@ -1,45 +1,42 @@
'use strict';
var arraySlice = require('../internals/array-slice-simple');
var arraySlice = require('../internals/array-slice');

var floor = Math.floor;

var mergeSort = function (array, comparefn) {
var sort = function (array, comparefn) {
var length = array.length;
var middle = floor(length / 2);
return length < 8 ? insertionSort(array, comparefn) : merge(
array,
mergeSort(arraySlice(array, 0, middle), comparefn),
mergeSort(arraySlice(array, middle), comparefn),
comparefn
);
};

var insertionSort = function (array, comparefn) {
var length = array.length;
var i = 1;
var element, j;
if (length < 8) {
// insertion sort
var i = 1;
var element, j;

while (i < length) {
j = i;
element = array[i];
while (j && comparefn(array[j - 1], element) > 0) {
array[j] = array[--j];
while (i < length) {
j = i;
element = array[i];
while (j && comparefn(array[j - 1], element) > 0) {
array[j] = array[--j];
}
if (j !== i++) array[j] = element;
}
if (j !== i++) array[j] = element;
} return array;
};
} else {
// merge sort
var middle = floor(length / 2);
var left = sort(arraySlice(array, 0, middle), comparefn);
var right = sort(arraySlice(array, middle), comparefn);
var llength = left.length;
var rlength = right.length;
var lindex = 0;
var rindex = 0;

var merge = function (array, left, right, comparefn) {
var llength = left.length;
var rlength = right.length;
var lindex = 0;
var rindex = 0;
while (lindex < llength || rindex < rlength) {
array[lindex + rindex] = (lindex < llength && rindex < rlength)
? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]
: lindex < llength ? left[lindex++] : right[rindex++];
}
}

while (lindex < llength || rindex < rlength) {
array[lindex + rindex] = (lindex < llength && rindex < rlength)
? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]
: lindex < llength ? left[lindex++] : right[rindex++];
} return array;
return array;
};

module.exports = mergeSort;
module.exports = sort;

0 comments on commit d5ee26e

Please sign in to comment.