递归排序

javaScript 复制代码
function sort(arr) {
  let left = 0, right = arr.length - 1;
  if(arr.length === 1 || arr.length === 0) {
    return arr;
  }
  let mid = (left + right) >> 1;
  let leftArray = sort(arr.slice(left, mid + 1));
  let rightArray = sort(arr.slice(mid + 1));
  return merge(arr, leftArray, rightArray)
}
function merge(arr, leftArray, rightArray) {
  let leftLength = leftArray.length, leftIndex = 0;
  let rightLength = rightArray.length, rightIndex = 0;
  while(leftIndex < leftLength && rightIndex < rightLength) {
    if(leftArray[leftIndex] < rightArray[rightIndex]) {
      arr[leftIndex + rightIndex] = leftArray[leftIndex];
      leftIndex++;
    } else {
      arr[leftIndex + rightIndex] = rightArray[rightIndex];
      rightIndex++;
    }
  }
  while(leftIndex < leftLength) {
    arr[leftIndex + rightIndex] = leftArray[leftIndex];
    leftIndex++;
  }
  while(rightIndex < rightLength) {
    arr[leftIndex + rightIndex] = rightArray[rightIndex];
    rightIndex++;
  }
  return arr;
}
console.log(sort([5,3,8,4,2,7,1,6]))
相关推荐
AndrewHZ2 分钟前
【遥感图像入门】DEM数据处理核心算法与Python实操指南
图像处理·python·算法·dem·高程数据·遥感图像·差值算法
CoderYanger5 分钟前
动态规划算法-子序列问题(数组中不连续的一段):28.摆动序列
java·算法·leetcode·动态规划·1024程序员节
有时间要学习25 分钟前
面试150——第二周
数据结构·算法·leetcode
liu****1 小时前
3.链表讲解
c语言·开发语言·数据结构·算法·链表
第二只羽毛1 小时前
C++ 高性能编程要点
大数据·开发语言·c++·算法
CQ_YM2 小时前
数据结构之栈
数据结构·算法·
爱学习的梵高先生2 小时前
C++:基础知识
开发语言·c++·算法
xlq223222 小时前
24.map set(下)
数据结构·c++·算法
繁华似锦respect3 小时前
C++ & Linux 中 GDB 调试与内存泄漏检测详解
linux·c语言·开发语言·c++·windows·算法
立志成为大牛的小牛3 小时前
数据结构——五十四、处理冲突的方法——开放定址法(王道408)
数据结构·学习·程序人生·考研·算法