经典排序之二 快速排序 + 二路归并
快速排序,顾名思义效率相比较其他排序方法高,它是一种交换排序
基本思路是
1:将待排序数组的中间见作为一个参考值
2:大于参考值的 放右边的数组,小于参考值的放左边的数组
3:对左右两个数组做1,2操作,直至数组里只有一个数值
function quickSort(arr){if(arr.length <=1 ){return arr;}//splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。 会改变原数组//Math.floor() 方法对一个数进行往下取整 小于等于x,且与x最接近的整数var temp = arr.splice(Math.floor(arr.length/2),1)[0];var arrLeft = [];var arrRight = [];for(var i=0;i<arr.length;i++){if(arr[i]>=temp){arrRight.push(arr[i]);} else {arrLeft.push(arr[i]);}}console.log("左边的数组:"+ arrLeft+ "参考值" + temp + "右边的数组:"+ arrRight + "总数组"+ arr)return quickSort(arrLeft).concat(temp,quickSort(arrRight));
//return arguments.callee(arrLeft).concat(temp,arguments.callee(arrRight)); 不推荐使用arguments.callee}var arr1 = [9,2,1,2,8,546,23,0];quickSort(arr1);左边的数组:2,1,2,0 参考值8 右边的数组:9,546,23 总数组9,2,1,2,546,23,0左边的数组:1,0 参考值2 右边的数组:2 总数组2,1,0左边的数组: 参考值0 右边的数组:1 总数组1左边的数组:9,23 参考值546 右边的数组: 总数组9,23左边的数组:9 参考值23 右边的数组: 总数组9[0, 1, 2, 2, 8, 9, 23, 546]
二路归并
//新的知识点 While 循环会在指定条件为真时循环执行代码块。 只要指定条件为 true,循环就可以一直执行代码。
function merge(left,right){var result = [],il= 0,ir=0;while(left.length>il && right.length>ir){if(left[il]<right[ir]){//挨个比较result.push(left[il++])} else {result.push(right[ir++])}console.log(result);}while(left[il]){//当两个数组的长短不一致,比较完成以后剩余的数字再添加上去result.push(left[il++])}while(right[ir]){result.push(left[ir++])}}var arr1 = [2,3,4,78,90,100];var arr2 = [1,58,77,79,91];merge(arr1,arr2)[1][1, 2][1, 2, 3][1, 2, 3, 4][1, 2, 3, 4, 58][1, 2, 3, 4, 58, 77][1, 2, 3, 4, 58, 77, 78][1, 2, 3, 4, 58, 77, 78, 79][1, 2, 3, 4, 58, 77, 78, 79, 90][1, 2, 3, 4, 58, 77, 78, 79, 90, 91]
经典排序之二 快速排序 + 二路归并相关推荐
- 算法设计与分析——十大经典排序算法二(6--10)
一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com Time of completion:2023.3.1 Las ...
- 经典排序算法之快速排序(二分法排序)
前言 前面两篇文章我们已经分析了经典排序算法中的冒泡排序和插入排序的思路,以及冒泡排序的优化方案.接下来我们将继续学习一个新的排序算法 - 快速排序(二分法排序). 思路分析 所谓的快速排序其实就是利 ...
- 十大经典排序算法之快速排序及其优化
一.快速排序 1.基本思想: 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. 3.再对左右区间重复第二步,直到各区间只有一个数. ...
- 常用排序算法(二)快速排序
快速排序 概要 本章介绍排序算法中的快速排序. 目录 1. 快速排序介绍 2. 快速排序图文说明 3. 快速排序的时间复杂度和稳定性 4. 快速排序实现 4.1 快速排序C实现 4.2 快速排序C++ ...
- Python排序算法(二) 快速排序、希尔排序、归并排序
这篇文章有的排序算法是:快速排序.希尔排序.归并排序. 快速排序 ''' 快速排序 '''def quick_sort(aList, first, last):if first >= last: ...
- 十大经典排序算法总结(够兄弟们喝一壶的)
Ⅰ.十大经典排序算法之插入排序及其二分优化:https://blog.csdn.net/Kevinnsm/article/details/114403557 Ⅱ.十大经典排序算法之冒泡排序及其优化:h ...
- 数据结构 10分钟让你掌握经典排序(二)
数据结构 经典排序算法总结(二) 交换排序 冒泡排序 快速排序(重要) 归并排序 归并排序 非比较排序 计数排序 交换排序 冒泡排序 冒泡排序:是一种简单的排序算法.它重复地走访过要排序的数列,一次比 ...
- python遍历数组冒泡排序_经典排序算法(冒泡排序,选择排序,插入排序,快速排序,堆排序)python实现...
最近在复习经典排序算法,自己用python也实现了一下,这里不会涉及到原理(因为网上方法已经很详细啦),就把函数贴上来,可以让大家自己试着运行下,再结合别处的原理也可以更好地理解它们的实现. 如果有错 ...
- 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...
最新文章
- 版本管理 - Git 使用入门
- NPTL简介 (NATIVE POSIX Thread Library)
- LeetCode Nth Digit
- c语言指向常量的指针和常量指针
- poj3050【dfs】
- 基于FPGA的AFDX接口实现
- javascript的垃圾回收机制指的是什么?
- 学习笔记(11月03日)
- LiveVideoStack 2021招聘季
- Kotlin 输出“Hello World”
- sympy模块解指数方程
- 「开源资讯」Sentinel Go 0.4.0 发布,支持热点流量防护能力
- Google 网站打不开
- WM_NOTIFY的使用
- 常用c语言代码大全,C语言的一些常用代码
- 在Python 3中使用深度森林(Deep Forest)进行分类
- Oracle-数据库的备份与恢复
- stm32 串口2空闲中断死机_STM32串口之空闲中断
- retry重试常见场景及实现
- 恺撒密码是古罗马恺撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:
热门文章
- Ceph性能测试、优化及硬件选型详解|万字长文
- tansig用计算机怎么按,【2017年整理】bp 工具箱的使用指南.doc
- 目标跟踪测试工具OTB使用教程
- 当程序员 | 从入门到放弃的真实经历
- 动力网络监控,动环环境监控是什么
- 详解RocketMQ中的Producer
- 基于STM32F429的SDRAM使用
- No.2 STM32F429IGT6 固件库 CMSIS标准及库和STM32官方文档资料总结 (STM32F429/F767/H743)
- JavaWeb学习笔记:JavaScript-鼠标悬浮和离开
- API、JSON等知识的初步学习,以及关于Quake Report应用的总结,以后开发可以用到的一些技能