首页 > 编程语言 >Javascript实现快速排序Quicksort

Javascript实现快速排序Quicksort

时间:2023-12-03 10:04:36浏览次数:55  
标签:arr Javascript 基准 元素 Quicksort 排序

"快速排序"的思想很简单,整个排序过程只需要三步:

(1)在数据集之中,选择一个元素作为"基准"(pivot)。

(2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。

(3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

代码实现

function quickSort(arr) {
  // 错误处理
  if (!arr) {
    return;
  }

  // 递归出口
  if (arr.length <= 1) {
    return arr;
  }

  // 取第一个元素作为支点
  let pivot = arr[0];

  // 剩余元素分到两个容器
  let left = [];
  let right = [];

  for (let i = 1; i < arr.length; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }

  // 合并递归结果
  return [...quickSort(left), pivot, ...quickSort(right)];
}

console.log(quickSort([1, 3, 5, 2, 4, 6]));
// [ 1, 2, 3, 4, 5, 6 ]

参考文章

  1. 快速排序(Quicksort)的Javascript实现

标签:arr,Javascript,基准,元素,Quicksort,排序
From: https://blog.51cto.com/mouday/8664084

相关文章

  • 详解十大经典排序算法(二):选择排序(Selection Sort)
    算法原理选择排序通过重复选择数组中最小元素,将其与未排序部分的第一个元素交换,实现排序。算法描述选择排序是一种简单的排序算法,它每次从待排序的元素中选择最小(或最大)的元素,将其放到已排序序列的末尾,直到整个序列排序完成。选择排序的基本思想是通过不断选择剩余元素中的最小(或......
  • 希尔排序
      ......
  • 算法之快速排序1初始(java)
    一:概述快速排序、归并排序、堆排序等都是比冒泡排序更快的算法。其中快速排序是从冒泡排序演变而来。快速排序之所以比冒泡排序要快是因为它用了分治法。    二:具体说明同冒泡排序一样,快速排序也属于交换排序,通过元素之间的比较进行比较和交换位置来达到排序的目的。不同的是......
  • 前端学习-JavaScript学习-js基础-API02-轮播图案例
    自己写的<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title>......
  • 快速排序
    #include<stdio.h>#include<stdlib.h>#include<string.h>typedefstruct{intNO;intAge;charName[50];}Student;typedefstruct{intStudentCount;Student*data;}Sqlist;intPartition(Sqlist&L,intlow,int......
  • 选择排序
    #include<stdio.h>#include<stdlib.h>#include<string.h>typedefstruct{intNO;intAge;charName[50];}Student;typedefstruct{intStudentCount;Student*data;}Sqlist;voidSelectSort(Sqlist&L){in......
  • 冒泡排序
    #include<stdio.h>#include<stdlib.h>#include<string.h>typedefstruct{intNO;intAge;charName[50];}Student;typedefstruct{intStudentCount;Student*data;}Sqlist;voidbubbleSort(Sqlist&L){in......
  • 希尔排序
    #include<stdio.h>#include<stdlib.h>voidshellSort(intarr[],intn){intdk,i,j,p;for(dk=n/2;dk>=1;dk=dk/2){for(i=dk+1;i<n;i++){if(arr[i]<arr[i-dk]){p=arr......
  • 几大排序的稳定性
    ​ 八大排序总结:(1)冒泡排序冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,......
  • 折半插入排序
    ACC==1升序,ACC==-1降序#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstruct{intNO;intAge;charName[50];}Student;typedefstruct{intStudentCount;Student*data;}Sqlist;voidBinsersort(Sql......