IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> JS双指针快速排序 -> 正文阅读

[数据结构与算法]JS双指针快速排序

  1. 快速排序是什么

    • 快速排序的本质思想是二分法,先找出一个基准值,经过一个遍历后,把比基准值小的数据放在左面,大的放在右面,再将分好的左面和右面的依次进行这种操作。
  2. 时间复杂度

    • 因为是二分法,所以时间复杂度是 O l o g n Ologn Ologn,代表数据增大n倍,耗时增加 O l o g n Ologn Ologn 倍。
    • O O O加上()的形式,里面包裹的是一个函数f(), O ( f ( ) ) O(f()) O(f()) 代表某个算法的耗时或耗空间与n(数据量)增长之间的关系。比如数据n增大256倍, l o g log log以2为底256的对数是8,所以耗时只需增加8倍。
  3. 实现

  • 快速排序是面试经常问到的一种排序算法,我们来梳理下思路。
    现在有个数组,首先找到一个基准值,可以将头部的当做基准值,也可以将尾部的当做基准值,我们取头部的当做基准值,定义一个temp指向头部。然后声明两个指针,一个left指向头部,一个right指向尾。right指针找比基准值小的,left指针找比基准值小的,交换两个指针的数字,再继续移动两个指针直到他们两个相遇,再交换temp和他们停下来指的位置。
const arr = [3, 6, 1, 2, 5, 4]

image.png
先移动right指针,right指向5,比3大,接着移动,指向2,比3小,停止。再移动left指针,指向6,比3大,停止。
image.png
接着交换两个指针所指向的值。
image.png
right接着向左移动,指向1,比3小,停止。left向右移动,指向1,这时leftright相遇了,证明整个数组都被遍历了一遍,此时把templeft right指向的数字交换。

image.png

image.png
到此时,第一轮的遍历结束,将数组分成了两部分,3左边的数字都是比3小的,右边都是比3大的。再次重复刚才的步骤,接着对左侧和右侧两个数组排序,不断的二分下去。

image.png

image.png
rightleft相遇,和temp指向同一个,左侧排序结束。接着右侧。

image.png
right指向的4比temp指向的6小,停止。移动left,指向5,比6小,继续移动,指向4,和right相遇。交换两个值。

image.png

image.png
排序结束。

image.png
过程就是这样,接下来代码实现下。

function quickSort(arr, begin, end) {
  if (begin >= end) {
      return
  }
  let temp = arr[begin];
  let left = begin;
  let right = end;
  while(right > left) {
      while(right > left && arr[right] >= temp) {
          right--;
      }
      while(right > left && arr[left] <= temp) {
          left++;
      }
      [arr[left], arr[right]] = [arr[right], arr[left]];
  }

  [arr[begin], arr[right]] = [arr[right], arr[begin]];
  quickSort(arr, begin, right - 1);
  quickSort(arr, right + 1, end);
  return arr;
}
const arr = [3, 6, 1, 2, 5, 4];
const result = quickSort(arr, 0, arr.length - 1);
console.log(result);
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-19 12:18:53  更:2021-08-19 12:20:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:24:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码