Merge Sort(Birleştirme Sıralaması)
Ödeve geri dön
function merge(arr, l, m, r) {
const [leftSubArray, rightSubArray] = [
arr.slice(l, m + 1),
arr.slice(m + 1, r + 1),
];
const [leftSize, rightSize] = [m - l + 1, r - m];
let [i, j, k] = [0, 0, l];
for (; i < leftSize && j < rightSize; k++) {
arr[k] =
leftSubArray[i] <= rightSubArray[j] ? leftSubArray[i] : rightSubArray[j];
leftSubArray[i] <= rightSubArray[j] ? i++ : j++;
}
for (; i < leftSize; i++, k++) {
arr[k] = leftSubArray[i];
}
for (; j < rightSize; j++, k++) {
arr[k] = rightSubArray[j];
}
}
function sort(arr, l, r) {
if (l >= r) {
return;
}
const m = l + Math.floor((r - l) / 2);
sort(arr, l, m);
sort(arr, m + 1, r);
merge(arr, l, m, r);
}
function MergeSort(arr) {
const [sArr, tStart] = [[...arr], Date.now()];
sort(sArr, 0, sArr.length - 1);
const tEnd = Date.now();
const processTime = `${tEnd - tStart}ms`;
return { array: sArr, processTime };
}
export default MergeSort;