首页
学习
活动
专区
圈层
工具
发布

排序算法:QuickSort

前言 前端小菜鸡一枚,分享的文章纯属个人见解,若有不正确或可待讨论点可随意评论,与各位同学一起学习~ 排序算法 Quick Sort 原理 • 快速排序在每一轮挑选一个基准元素,并让其他比基准元素大的元素移到数列的一遍...• 时间复杂度为:O(n log n) • 每一轮的比较和交换,需要把数组的全部元素都遍历一遍,时间复杂度为 O(n),这样的遍历需要多少轮呢?...• 执行循环,从 right 指针开始,让指针指向的元素跟基准元素做比较,如果大于或等于 pivot,则指针向移动,如果小于 pivot,则 right 指针停止移动,切换到 left 指针。...Array.prototype.quickSort = function () { // 递归函数 let rec = (arr) => { // 边界条件...=> { this[index] = item; }); }; let arr = [98, 4, 6, 84, 42, 8674, 434, 56, 465]; arr.quickSort

23010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【优选算法】D&C-Quicksort-Mysteries:分治-快排的算法之迷

    本篇是优选算法之分治-快排,快排可以在更短的时间内完成相同规模数据的排序任务,大大提升了运算效率,空间复杂度在平均状况下仅为O(log N) 1.概念解析 什么是分治-快排?...最终每个子数组只剩 1 个元素时,天然有序,整个大数组也就完成排序 2.颜色分类 ✏️题目描述: ✏️示例: 传送门:颜色分类 题解: 对于排序的题目,根据前些的学习我们一般都是想到冒泡排序等基础算法...,但是此类算法对于带有重复性的排序很不友好,还是太慢了,因此对于这道题,也是一道经典的荷兰国旗问题,使用类似双指针算法中的移动零那道题的方法,划分区间比较排序,衍生出来了一种三划分排序算法,也叫作快速排序...left + 1) + left]; } }; 4.数组中的第k个最大元素 ✏️题目描述: ✏️示例: 传送门:数组中的第k个最大元素 题解: 本题要求找数组中的第k个最大元素,本质是快速排序算法中的快速选择算法...,该方法同样适用第k小,前k大,前k小 细节问题: 快速选择算法和快速排序基本上一样,唯一不同的是要在递归时选择区间,若c>=k,说明第k大落在大于基准元素的这段区间,那么只在这段区间寻找即可;若b+c

    20010

    排序算法比较

    1、稳定性 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。 2、研究排序算法的稳定性有何意义?   ...而稳定的排序会保证比较时,如果两个学生年龄相同,一定不会交换。 那也就意味着尽管是对“年龄”进行了排序,但是学号顺序仍然是由小到大的要求。...注意是相邻的两个元素进行比较,而且是否需要交换也发生在这两个元素之间。 所以,如果两个元素相等,我想你是不会再无聊地把它们俩再交换一下。...比较拗口,举个例子:序列5 8 5 2 9, 我们知道第一趟选择第1个元素5会与2进行交换,那么原序列中两个5的相对先后顺序也就被破坏了。 所以选择排序不是一个稳定的排序算法。...比较是从有序序列的末尾开始,也就是把待插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面。 否则一直往前找直到找到它该插入的位置。

    93020

    前端算法-基本排序算法比较

    基本排序算法   这里主要介绍的基本排序算法主要包括: 冒泡排序,选择排序,插入排序,之后的文章会介绍希尔排序,快速排序等高级排序算法, 文章后面会对这几个算法进行性能比较....基本排序算法的核心思想是对一组数据按照一定的顺序重新排列. 重新排列主要就是嵌套的for循环. 外循环会遍历数组每一项,内循环进行元素的比较....注: 文中都以实现升序排序为例: 1.冒泡排序   冒泡排序是最慢的排序算法之一, 也是最容易实现的排序算法.使用这种算法进行排序时,数据值会像气泡一样从数组的一端漂浮到另一端,所以称之为冒泡排序.假设要对数组按照升序排列...原理:   从开始第一对相邻元素开始,对每一对相邻元素进行比较,如果第一个比第二个大,就交换它们两个, 这样直到最后一对元素比较结束,最后的元素就是最大的数,重复这个过程,就可以完成排序....preIndex--; } arr[preIndex + 1] = current; } return arr; } 4.基本排序算法的性能比较

    1.1K130

    机器学习算法比较

    假如你在乎精度(accuracy)的话,最好的方法就是通过交叉验证(cross-validation)对各个算法一个个地进行测试,进行比较,然后调整参数确保每个算法达到最优解,最后选择最好的一个。...对小规模的数据表现很好,能个处理多分类任务,适合增量式训练; 对缺失数据不太敏感,算法也比较简单,常用于文本分类。...关于随机森林和GBDT等组合算法,参考这篇文章:机器学习-组合算法总结 缺点:对outlier比较敏感 6SVM支持向量机 高准确率,为避免过拟合提供了很好的理论保证,而且就算数据在原特征空间线性不可分...优点 算法简单,容易实现 ; 对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k算法选择参考 之前翻译过一些国外的文章,有一篇文章中给出了一个简单的算法选择技巧: 1、首当其冲应该选择的就是逻辑回归,如果它的效果不怎么样,那么可以将它的结果作为基准来参考,在基础上与其他算法进行比较

    66730

    常见排序算法比较

    排序算法比较图片如何分析一个排序算法?可以从以下三个方面分析排序算法:1、 时间效率 这里所谓的实践效率就是时间复杂度。复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系。...对于时间复杂度的分析,要把最好时间复杂度、最坏时间复杂度、平均时间复杂度分析出来,分别对应了排序算法的最好排序情况、最坏排序情况以及平均排序效率。...2、 空间消耗 所谓的空间消耗对应的是空间复杂度,在排序算法中需要开辟的额外内存空间是多少。如果空间复杂度为 O(1),此时该排序叫做原地排序。...3 、稳定性 算法的稳定性虽然我们之前接触的很少,但是稳定性也是衡量一个排序算法的重要标准。什么是稳定排序呢?比如有一组有重复待排序的数据,排序前后,重复的数据顺序不变,此时该排序为稳定排序。...常见排序算法分类图片常见排序算法比较:图片参考资料十大经典排序算法动图演示菜鸟教程——经典排序算法

    70840

    机器学习算法比较

    假如你在乎精度(accuracy)的话,最好的方法就是通过交叉验证(cross-validation)对各个算法一个个地进行测试,进行比较,然后调整参数确保每个算法达到最优解,最后选择最好的一个。...对小规模的数据表现很好,能个处理多分类任务,适合增量式训练; 对缺失数据不太敏感,算法也比较简单,常用于文本分类。 缺点: 需要计算先验概率; 分类决策存在错误率; 对输入数据的表达形式很敏感。...关于随机森林和GBDT等组合算法,参考这篇文章:机器学习-组合算法总结 缺点:对outlier比较敏感 ---- 6.SVM支持向量机 高准确率,为避免过拟合提供了很好的理论保证,而且就算数据在原特征空间线性不可分...优点 算法简单,容易实现 ; 对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k算法选择参考 之前翻译过一些国外的文章,有一篇文章中给出了一个简单的算法选择技巧: 首当其冲应该选择的就是逻辑回归,如果它的效果不怎么样,那么可以将它的结果作为基准来参考,在基础上与其他算法进行比较;

    70590

    机器学习算法比较

    假如你在乎精度(accuracy)的话,最好的方法就是通过交叉验证(cross-validation)对各个算法一个个地进行测试,进行比较,然后调整参数确保每个算法达到最优解,最后选择最好的一个。...对小规模的数据表现很好,能个处理多分类任务,适合增量式训练; 对缺失数据不太敏感,算法也比较简单,常用于文本分类。 缺点: 需要计算先验概率; 分类决策存在错误率; 对输入数据的表达形式很敏感。...关于随机森林和GBDT等组合算法,参考这篇文章:机器学习-组合算法总结 缺点:对outlier比较敏感 6、SVM支持向量机 高准确率,为避免过拟合提供了很好的理论保证,而且就算数据在原特征空间线性不可分...优点 算法简单,容易实现 ; 对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k算法选择参考 之前翻译过一些国外的文章,有一篇文章中给出了一个简单的算法选择技巧: 1、首当其冲应该选择的就是逻辑回归,如果它的效果不怎么样,那么可以将它的结果作为基准来参考,在基础上与其他算法进行比较

    914120

    机器学习算法比较

    机器学习算法对比 本文中对几种常见的机器学习算法进行了总结,主要是监督学习和非监督学习的算法对比: KNN 聚类和降维 决策树和随机森林 ?...K近邻-KNN(有监督) 算法思想 物以类聚,给定一个训练数据集,对于新输入的实例,在训练集数据中找出和该实例最邻近的k个实例,算法的具体步骤为: 算距离:给定测试对象,计算它与训练集中的每个对象的距离...算法接受一个未标记的数据集,然后将数据聚类成不同的组。...算法主要是分类:聚类的目的是将相似的东西放在一起,通过计算样本间和群体间距离得到 主要算法包含:K-Means、层次聚类等 无监督学习算法 聚类:K-Means 降维:PCA 主成分分析-PCA PCA...,偏向于取值较多的属性进行分割 C4.5:基于信息增益率来选择,对数目较少的属性有所偏好 CART:基于基尼系数来选择,采用的是二元切分法;基尼系数越小越好,数据的纯度越高 决策树算法 算法描述 ID3

    62410
    领券