iis服务器助手广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >如何使用快速排序
  • 269
分享到

如何使用快速排序

2024-04-02 19:04:59 269人浏览 泡泡鱼
摘要

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

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

 快速排序
快速排序是什么 快速排序是图灵奖得主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 <arr.length; i++) {         if (arr[i] < base) {           left.push(arr[i])         }else {           right.push(arr[i])         }       }        return quickSort(left).concat([base], quickSort(right));     }

实现一个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]

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

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

<!DOCTYPE html>   <html>       <head>     <meta charset="UTF-8">     <title></title>     <script type="text/javascript">      console.time("test0")      function qSort(arr) {       if(arr.length == 0) {        return [];       }       var left = [];       var right = [];       var pivot = arr[0];       for(var i = 1; i < arr.length; i++) { // 注意这里的起始值,因为有一个作为flag了        if(arr[i] < pivot) {         left.push(arr[i]);        } else {         right.push(arr[i]);        }       }       return [...qSort(left), pivot, ...qSort(right)];      }      console.log(qSort([9, 4, 10, 3, 1, 1, 0, 10, 8, 3, 9, 9, 4, 10, 10, 9, 9, 9, 1, 0]));      console.timeEnd("test0")     </script>     <script type="text/javascript">      console.time("test1")      function qSort3(arr) {       //三路快排       if(arr.length == 0) {        return [];       }       var left = [];       var center = [];       var right = [];       var pivot = arr[0];    //偷懒,直接取第一个,实际取值情况 参考[快速排序算法的优化思路总结]       for(var i = 0; i < arr.length; i++) {              if(arr[i] < pivot) {         left.push(arr[i]);        } else if(arr[i] == pivot) {         center.push(arr[i]);        } else {         right.push(arr[i]);        }       }       return [...qSort3(left), ...center, ...qSort3(right)];      }      console.log(qSort3([9, 4, 10, 3, 1, 1, 0, 10, 8, 3, 9, 9, 4, 10, 10, 9, 9, 9, 1, 0]))      console.timeEnd("test1")     </script>    </head>       <body>    </body>      </html>

如何使用快速排序

如何使用快速排序

如何使用快速排序

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

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

--结束END--

本文标题: 如何使用快速排序

本文链接: https://www.lsjlt.com/news/84491.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用快速排序
    这篇文章主要介绍“如何使用快速排序”,在日常操作中,相信很多人在如何使用快速排序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用快速排序”的疑惑有所帮助!接下来,请跟着...
    99+
    2024-04-02
  • JS如何快速排序
    这篇文章主要介绍JS如何快速排序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下说明时间复杂度指的是一个算法执行所耗费的时间空间复杂度指运行完一个程序所需内存的大小稳定指,...
    99+
    2024-04-02
  • 如何使用C语言实现快速排序
    本篇内容主要讲解“ 如何使用C语言实现快速排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ 如何使用C语言实现快速排序”吧!快速排序的基本思想是:任取待排序数列中的一个数作为 key 值,通过...
    99+
    2023-07-05
  • 如何使用PHP描述快速排序算法
    这篇文章主要为大家展示了“如何使用PHP描述快速排序算法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用PHP描述快速排序算法”这篇文章吧。使用PHP描述...
    99+
    2024-04-02
  • web如何实现快速排序
    这篇文章主要为大家展示了“web如何实现快速排序”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web如何实现快速排序”这篇文章吧。快速排序是对冒泡排序的一种改进。它的基本思想是:通过一次排序将要...
    99+
    2023-06-27
  • C语言快速排序如何应用
    今天小编给大家分享一下C语言快速排序如何应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。快速排序快速排序,说白了就是给基准...
    99+
    2023-06-30
  • Python如何实现快速排序
    这篇文章主要介绍“Python如何实现快速排序”,在日常操作中,相信很多人在Python如何实现快速排序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何实现快速排序”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-04
  • 【Java】快速排序
    文章目录 一、什么是快速排序二、基准元素的选择1、选择第一个元素2、随机选择 三、元素的交换1、双边循环法2、单边循环法 一、什么是快速排序 快速排序是由冒泡排序演变而来,比冒泡排序更快的排序算法。之所以快,是因为快速排...
    99+
    2023-08-17
    java 排序算法 算法 学习 开发语言
  • PHP 快速排序
    描述 快速排序算法是对冒泡排序算法的改进,其基本思想是通过设置一个初始的中间值,来将需要排序的数组分成3部分:小于中间值的左边数组,中间值,大于中间值的右边数组,使用递归用相同的方式来排序左边和右边,最后合并数组。 示例 function ...
    99+
    2023-09-18
    php 算法 排序算法
  • Java 快速排序
    快速排序是一种常用的基于比较的排序算法,其时间复杂度为 O(nlogn),并且具有稳定性和广泛的应用场景。本文将全面详细的讲解一下 Java 中快速排序算法的原理、实现以及时间复杂度等问题。 一、快速...
    99+
    2023-09-06
    java 排序算法 算法
  • 手撕排序之快速排序
    快排的思想(霍尔版本): 如何实现单趟排序: 先假设key是数列的首元素,然后分别定义left和right,left指向首元素的下一个元素,right指向最后一个元素。 先遍历右边,如果比key小,就停止遍历,如果比key大就right-...
    99+
    2023-10-25
    算法 排序算法 数据结构
  • Java快速排序方法怎么使用
    本篇内容介绍了“Java快速排序方法怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!快速排序思想介绍快速排序使用了分治的思想,通过一轮...
    99+
    2023-06-02
  • 使用 Python 实现快速排序算法
    快速排序是一种高效的排序算法,它采用分治法的思想进行排序。在 Python 中,我们可以使用以下代码实现快速排序算法: def quick_sort(arr): if len(arr) ...
    99+
    2023-09-02
    排序算法 算法
  • java 排序算法之快速排序
    目录简单介绍基本思想思路分析代码实现推导实现完整实现大数据量耗时测试性能分析简单介绍 快速排序(Quicksort) 是对 冒泡排序的一种改进。 基本思想 快速排序算法通过多次比较和...
    99+
    2024-04-02
  • 如何使用VC库函数中的快速排序函数
    函数原型:void qsort(void *base,size_t num,size_t width, int (__cdecl *compare )(const void *, c...
    99+
    2022-11-15
    快速排序函数 VC库函数
  • C语言如何实现快速排序
    今天小编给大家分享一下C语言如何实现快速排序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。交换排序的思想基本思想:所谓交换,...
    99+
    2023-07-02
  • java如何实现快速排序算法
    这篇文章将为大家详细讲解有关java如何实现快速排序算法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。快速排序算法使用的分治法策略来把一个序列分为两个子序列来实现排序的思路:1.从数列中挑出一个元素,称为...
    99+
    2023-06-02
  • 快速排序python实现
      快速排序 快速排序的实现同样使用分治法,它的原理是从序列中选择一个值作为基准值,然后分成比基准值小的序列集合和比基准值小的序列集合和与基准值相等的序列集合。 再将比基准值小的序列集合和比基准值小的序列集合再次进行选择基准值分割,最...
    99+
    2023-01-31
    快速 python
  • python 快速排序实现
    import random num_list = []for x in range(30):    num_list.append(random.randint(1, 500))list_len = ...
    99+
    2023-06-02
  • 单链表快速排序
    点击(此处)折叠或打开...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作