js 快速排序 All In One
js 快速排序 All In One
快速排序 / Quick Sort
"use strict";
/**
 *
 * @author xgqfrms
 * @license MIT
 * @copyright xgqfrms
 * @created 2020-08-01
 * @modified
 *
 * @description 快速排序 quicksort
 * @difficulty Medium
 * @complexity O(n*log(n))
 * @augments
 * @example
 * @link https://github.com/xgqfrms/leetcode/issues/7#issuecomment-669991209
 * @solutions
 *
 */
const log = console.log;
function quickSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }
  // 中间index
  var pivotIndex = Math.floor(arr.length / 2);
  // 中间值,参考值
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  // 递归
  return quickSort(left).concat([pivot], quickSort(right));
};
const arr = [12, 7, 5, 23, 18, 37, 1, 9, 17];
const test = quickSort(arr);
log(`arr =\n`, arr)
log(`test =\n`, test)
/*
arr =
 [
  12, 7, 5, 23,
  37, 1, 9, 17
]
test =
 [
   1,  5,  7,  9, 12,
  17, 18, 23, 37
]
*/
/**
 *
 * @author xgqfrms
 * @license MIT
 * @copyright xgqfrms
 * @created 2020-10-01
 * @modified
 *
 * @description 快速排序 quicksort
 * @difficulty Medium
 * @complexity O(n*log(n))
 * @augments
 * @example
 * @link https://www.cnblogs.com/xgqfrms/p/13857663.html
 * @solutions
 *
 */
const log = console.log;
function quickSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }
  // 中间 index
  let pivotIndex = Math.floor(arr.length / 2);
  // 截取中间值, splice 改变原数组长度,   slice 不改变原数组长度
  const pivot = arr.splice(pivotIndex, 1)[0];
  const left = [];
  const right = [];
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  // 递归
  return quickSort(left).concat([pivot], quickSort(right));
};
const arr = [12, 7, 5, 23, 18, 37, 1, 9, 17];
const test = quickSort(arr);
log(`arr =\n`, arr)
log(`test =\n`, test)
refs
https://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html
https://github.com/xgqfrms/leetcode/issues/7#issuecomment-669991209
xgqfrms 2012-2020
www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
js 快速排序 All In One的更多相关文章
- JS快速排序和去重
		JS的快速排序和JS去重在面试的时候问的挺多的.下面是我对快速排序的理解,和快速排序,去重的代码. 1.什么是快速排序? 第一步: 快速排序就是去个中间值,把比中间值小的放在左边设为arrLeft,比 ... 
- js快速排序算法解析
		数组的快速排序算法,和并归排序步骤基本类似. 都是先拆分,后合并.并归排序是:拆分容易,合并难. 快速排序是:拆分难,合并容易 要理解快速排序,首先要理解拆分逻辑 要素:找一个基准点,通过操作使得数列 ... 
- JS快速排序 希尔排序 归并排序 选择排序
		/* 快速排序 1.1 算法描述 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用.快速排序是一种既不浪费空间又可以快一 ... 
- js快速排序算法
		真正的快速排序算法一: function quickSort(array){ function sort(prev, numsize){ var nonius = prev; var j = nums ... 
- js快速排序
		function sort(arr){ if(arr.length<=1){ return arr; } var num = Math.floor(arr.length/2); var numV ... 
- js快速排序方法
		function quickSort(arr){ if(arr.length<=1){ return arr; } var arrIndex=Math.floor(arr.length/2); ... 
- js快速排序法
		var quickSort = function(arr) { if (arr.length <= 1) { return arr; } var pivotIndex = Math.floor( ... 
- js 快速排序
		<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- js 快速排序算法
		Array.prototype.quickSort = function() { var len = this.length; if(len < 2) return this; var left ... 
随机推荐
- Linux sudo权限提升漏洞整改方法
			一.漏洞概述 1月26日,Sudo发布安全通告,修复了一个类Unix操作系统在命令参数中转义反斜杠时存在基于堆的缓冲区溢出漏洞.当sudo通过-s或-i命令行选项在shell模式下运行命令时,它将在命 ... 
- MySQL新特性MTS
			一.MTS:多线程复制 MTS简介 在MySQL 5.6版本之前,Slave服务器上有两个线程I/O线程和SQL Thread线程.I/O线程负责接收二进制日志(Binary Log,更准确的说是二进 ... 
- 自动化接口差异测试-diffy  回归测试  charles rewrite 请求
			https://mp.weixin.qq.com/s/vIxbtQtRRqgYCrDy7XTcrA 自动化接口差异测试-diffy Boris 搜狗测试 2018-08-30 自动化接口差异测试- ... 
- LDAP学习
			.top pre { display: block; background: rgba(68, 67, 65, 1); color: rgba(255, 255, 255, 1); margin: 1 ... 
- Okio Okio源码分析
			概述 Okio 作为 Okhttp 底层 io 库,它补充了 java.io 和 java.nio 的不足,使访问.存储和处理数据更加容易.Okio 的特点如下: okio 是一个由 square 公 ... 
- idea一定要做的配置
			自动编译开关 忽略大小写开关 IDEA默认匹配大小写,如果你开了这个开关,你无论输入String或者string都会出现代码提示或者智能补充 智能导包开关 两个选项勾上:自动导入不明确的结构.智能优化 ... 
- python几个练习(素数、斐波那契数列)
			随机输入求素数: x = int(input("please enter the number:")) if x != 1: for i in range(2, x): if x ... 
- Spring集成swagger步骤(包含Header)
			1.添加依赖,2.4.0: <dependency> <groupId>io.springfox</groupId> <artifactId>sprin ... 
- dedecms万能SQL标签使用方法大全
			注意:dede_archives这是系统默认的数据库表,如果你修改过表前缀dede_,请自行更改表名.在以下示例的标签中,有一部分只写出了SQL语句,具体的完整标签写法请参考:织梦SQL标签调用方法. ... 
- mysql高级day1
			Mysql高级-day01 MySQL高级课程简介 序号 Day01 Day02 Day03 Day04 1 Linux系统安装MySQL 体系结构 应用优化 MySQL 常用工具 2 索引 存储引擎 ... 
