快速排序

-

 

 

复制代码
const array = [10, 7, 2, 100, 5, 5, 230, 400, 1, -2];
// 快速排序
// 取一个基准值
// 根据基准值分出来  小于基准值的数组 和 大于基准值的数组
// 进入递归
// 当递归的数组小于两个时 跳出递归 将这个数组返回 基准条件
// 最后将每个数组拼接在一起

/**
 * 快速排序
 * @param {number[]} arr 
 * @returns 
 */
function quickSort(arr) {
  // 跳出递归的基准条件
  if(arr.length < 2) return arr;
  // 基准值选为数组的第一项
  const goal = arr[0];
  const minArr = arr.slice(1).filter(item => item <= goal);
  const maxArr = arr.slice(1).filter(item => item > goal);
  return quickSort(minArr).concat(goal).concat(quickSort(maxArr));
}
复制代码

 快速排序与归并排序的区别:

快速排序是先在数组元素中招一个基准点,根据基准点把小于基准点的元素放在左侧,大于基准点的元素放在右侧,分割完成后左侧的元素肯定大于右侧的元素,

然后对左侧元素和右侧元素再分别取出m、n两个基准点,进行分割分为4份,然后在4份的基础上再进行分割,分为8份,递归调用该快速排序算法,知道整个数组有序为止。

快速排序是 先整体有序,再局部有序;

 

归并排序是,先用二分法把数组分成两份,左侧和右侧分别进行排序,两边先排序完成,再组合到一起。

归并排序是 先局部有序,再整体有序。

 

 

 

-

posted @   古墩古墩  Views(28)  Comments(0Edit  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示