千家信息网

如何使用快速排序

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍"如何使用快速排序",在日常操作中,相信很多人在如何使用快速排序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何使用快速排序"的疑惑有所帮助!接下来,
千家信息网最后更新 2025年01月19日如何使用快速排序

这篇文章主要介绍"如何使用快速排序",在日常操作中,相信很多人在如何使用快速排序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何使用快速排序"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

快速排序
快速排序是什么 快速排序是图灵奖得主C. A. R. Hoare(1934--)于1960时提出来的。

快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。整个排序过程只需要三步:

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

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

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

引自wikipedia 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序n个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n)算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

步骤
找到该数组的基准点(中间数),并创建两个空数组left和right;
遍历数组,拿出数组中的每个数和基准点进行比较,如果比基准点小就放到left数组中,如果比基准点大就放到right数组中;
对数组left和right进行递归调用。
方法一

function quickSort(arr) {       if (arr.length<=1) {return arr;}       var left = [],         right = [],         baseDot =Math.round(arr.length/2),         base =arr.splice(baseDot, 1)[0];        for (var i =0; i 

实现一个quickSort的封装,并且定义left和right,找到数组的基准点baseDot和对应的基数base,然后遍历数组的每一项和base进行对比,最后递归调用,给出一个跳出条件if (arr.length <= 1) {return arr;}

方法二

function quickSort(array, left, right) {       var length =array.length;         left =typeof left ==='number'? left :0,         right =typeof right ==='number'? right : length-1;          if (left < right) {             var index = left -1;             for (var i = left; i <= right; i++) {                 if (array[i] <= array[right]) {                     index++;                     var temp = array[index];                     array[index] = array[i];                     array[i] = temp;                 }             }             quickSort(array, left, index -1);             quickSort(array, index +1, right);         }         return array;     }

快速排序的基本思想就是分治法

引自wikipedia 在计算机科学中,分治法是建基于多项分支递归的一种很重要的算法范式。字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。

快速排序的改进方法:三路快排
定义
三路快速排序是快速排序的的一个优化版本, 将数组分成三段, 即小于基准元素、 等于 基准元素和大于基准元素, 这样可以比较高效的处理数组中存在相同元素的情况,其它特征与快速排序基本相同。

我这里简单概括一下思路,有兴趣的同学可到上面的链接上阅读:[快速排序及优化(Java实现)][Java]

  • 随机选取基准值base(支点随机选取),参考[快速排序算法的优化思路总结][Link 1]

  • 配合着使用插入排序(当问题规模较小时,近乎有序时,插入排序表现的很好)

  • 当大量数据,且重复数多时,用三路快排

                                                   

可以看到对有重复数据的数据优化还是很可观的。

到此,关于"如何使用快速排序"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

排序 基准 数组 数据 元素 问题 算法 方法 三路 递归 学习 相同 两个 基准点 思路 更多 状况 部分 右边 子集 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 cad软件开发 上海 泰拉瑞亚服务器插件翻译 集团客户部软件开发项目管理规范 http服务器进程的端口号是 违反网络安全法第二十二条处罚 vb数据库连接用户登录 面软件开发问哪些问题 数据库可以看谁删除了数据吗 服务器安装了数据库总是坏 我的世界推荐绝版服务器 服务器群安全设置 北京环境监测软件开发服务 镇江网络营销软件开发诚信合作 19c 数据库 备份恢复 县局网络安全制度落实情况 方舟怎么开主机服务器 预防网络安全的策略和技术 上海定制网络技术批发价 计算机网络安全管理目录 网络技术在教学中的应用文献 香港大学软件开发成果 招远微信小程序软件开发外包公司 潜渊症服务器人机加点 漫画网络安全讲法 如何将服务器的数据传给数据库 军民融合及网络安全情况汇报 网络安全保障工作隐患排查 金华软件开发费 高校 网络安全 案例 战地4服务器多少钱
0