带你读《图解算法小抄》十四、排序(7)

简介: 带你读《图解算法小抄》十四、排序(7)

带你读《图解算法小抄》十四、排序(6)https://developer.aliyun.com/article/1348144?groupCode=tech_library


1原理

归并排序的基本思想是将待排序的序列不断划分为两个子序列,直到每个子序列只剩下一个元素,然后再将这些子序列两两合并,直到最终得到有序的序列。具体的排序流程如下:

 

  • 步骤1:将待排序序列分成两个子序列,分别进行递归排序;
  • 步骤2:将两个已排序的子序列合并成一个有序序列。

 

function mergeSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }
  const mid = Math.floor(arr.length / 2);
  const left = mergeSort(arr.slice(0, mid)); // 递归排序左半部分
  const right = mergeSort(arr.slice(mid)); // 递归排序右半部分
  return merge(left, right); // 合并左右两个有序子序列}
function merge(left, right) {
  let i = 0; // 左半部分指针
  let j = 0; // 右半部分指针
  const merged = [];
  while (i < left.length && j < right.length) {
    if (left[i] < right[j]) {
      merged.push(left[i]); // 将较小值放入合并数组
      i++;
    } else {
      merged.push(right[j]); // 将较小值放入合并数组
      j++;
    }
  }
  // 将剩余的元素放入合并数组
  return merged.concat(left.slice(i)).concat(right.slice(j));
}

2优化手段:

尽管归并排序已经是一种高效的排序算法,但我们可以通过一些优化手段进一步提高其性能。下面介绍几种常见的优化策略:

插入排序优化:

对于小规模的子序列,插入排序的时间复杂度较低,因此可以在归并排序的过程中使用插入排序来提高性能。具体做法是,在划分到一定规模后,将子序列采用插入排序算法进行排序。

优化合并过程:

在合并两个有序子序列时,如果发现左边子序列的最大元素小于等于右边子序列的最小元素,那么说明整个序列已经有序,可以直接跳过合并操作,节省时间。


带你读《图解算法小抄》十四、排序(8)https://developer.aliyun.com/article/1348142?groupCode=tech_library

 

相关文章
|
6月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
343 5
|
6月前
|
机器学习/深度学习 运维 算法
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
355 0
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
|
7月前
|
机器学习/深度学习 算法 安全
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
290 1
|
6月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
242 0
|
6月前
|
机器学习/深度学习 算法 安全
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
206 0
|
7月前
|
机器学习/深度学习 算法 安全
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
151 0
|
6月前
|
存储 算法 搜索推荐
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
专攻软考高频算法,深度解析二分查找、堆排序、快速排序核心技巧,对比九大排序算法,配套动画与真题,7天掌握45%分值模块。
289 1
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
|
6月前
|
供应链 算法 Java
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
243 1
|
7月前
|
传感器 并行计算 算法
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
506 3
|
6月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
154 0