首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用javascript实现quickSort算法的比较计数器

快速排序(QuickSort)是一种常用的排序算法,它通过将待排序的序列分割成较小和较大的两个子序列,然后递归地对子序列进行排序,最终将整个序列排序完成。

下面是使用 JavaScript 实现快速排序算法的比较计数器的代码:

代码语言:txt
复制
function quickSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }

  const pivot = arr[Math.floor(arr.length / 2)];
  const left = [];
  const right = [];
  let count = 0;

  for (let i = 0; i < arr.length; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i]);
      count++;
    } else if (arr[i] > pivot) {
      right.push(arr[i]);
      count++;
    }
  }

  return quickSort(left).concat([pivot], quickSort(right));
}

const arr = [5, 2, 9, 1, 7, 6, 3, 8, 4];
const sortedArr = quickSort(arr);
console.log(sortedArr);
console.log("比较计数器:" + (arr.length - 1));

在上述代码中,我们首先定义了一个 quickSort 函数,它接受一个待排序的数组作为参数。如果数组长度小于等于 1,直接返回该数组。

接下来,我们选择数组中间的元素作为基准值(pivot),然后遍历数组,将小于基准值的元素放入 left 数组中,将大于基准值的元素放入 right 数组中,并且每次比较都增加计数器的值。

然后,我们通过递归调用 quickSort 函数对 leftright 数组进行排序,并使用 concat 方法将排序后的结果与基准值连接起来,最终得到排序完成的数组。

最后,我们使用一个示例数组 [5, 2, 9, 1, 7, 6, 3, 8, 4] 进行测试,并输出排序后的结果和比较计数器的值。

快速排序算法的时间复杂度为 O(nlogn),是一种高效的排序算法。它在处理大规模数据时表现出色,适用于各种排序场景。

腾讯云提供了多种云计算相关产品,例如云服务器、云数据库、云存储等。你可以通过访问腾讯云官方网站(https://cloud.tencent.com/)了解更多关于这些产品的详细信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

快速排序(QuicksortJavascript实现

日本程序员norahiko,写了一个排序算法动画演示,非常有趣。 这个周末,我就用它当做教材,好好学习了一下各种排序算法。...排序算法(Sorting algorithm)是计算机科学最古老、最基本课题之一。要想成为合格程序员,就必须理解和掌握各种排序算法。...目前,最常见排序算法大概有七八种,其中"快速排序"(Quicksort)使用得最广泛,速度也较快。它是图灵奖得主C. A. R. Hoare(1934--)于1960时提出来。...第一步,选择中间元素45作为"基准"。(基准值可以任意选择,但是选择中间比较容易理解。)...下面参照网上资料(这里和这里),Javascript语言实现上面的算法。 首先,定义一个quickSort函数,它参数是一个数组。

76150

计数器、滑动窗口、漏桶、令牌算法比较和伪代码实现

想法很直接,就是想在一定时间内把请求限制在一定范围内,保证系统不被冲垮,同时尽可能提升系统吞吐量 限流常用方式 计数器、滑动窗口、漏桶、令牌 计数器 计数器是限流里最简单,简单来说,比如 我限制1...到了2018-02-27 16:24:00,把计数器归零! 周而复始! ? 但这种会有问题!比如我在前58s都不请求,而在最后一秒请求60次!这样效果跟木有啥区别.....滑动窗口其实就是 细分之后计数器! ? 这样假设, 先把一分钟划分成6段! 也就是10s一个段!在第一段里,假如请求61次,那么直接触发了规则!肯定就过不去了!如果只请求了1次!则是正常!...当时间走到第二个段里,即10s~20s这段范围里,我请求数不能超过总限定条件,且当前段请求数量 加上 之前段总数量也不能超过总限定数量! 当时间到了50s~60s,依然是一样!...标准来说,就是不管多少请求,最后给服务请求数量速率是恒定!多余请求将 “抛弃掉”(抛弃并不代表直接丢掉不处理..) ?

2.6K21

JavaScript 实现寻路算法 —— 编程训练

通过可视化来理解算法 算法里面也是有 UI 相关部分 并且有一些 JavaScript 特有的部分 学习这部分可以让大家对 JavaScript 语言提高熟悉程度 并且对语言里面的应用方式获得一个更深了解...但是我们一般不会用这个组合来做栈,因为我们考虑到 JavaScript 数组实现,这样使用性能会变低。)...加入 Async 和 Await 来方便调试和展示 上一个代码中,其实已经实现了寻路算法主体部分了。...处理路径问题 上一步我们一个动画,让我们特别清晰去理解整个寻路算法过程。但是上一步提到第二个问题,我们目前是还没有解决。...这里我们一个非常 “土鳖” 数组来实现这个 Sorted 类,但是在计算机当中,我们还有很多其他方式可以实现这一种类。

1.1K20

排序算法实现比较

注:如果要实现从大到小排序,只需将for(i=0;i=10;i--). 现在尝试输入n个0~1000之间整数,将他们从大到小排序。...而每一趟都需要从第1位开始进行相邻两个数比较,将较小一个数放在后面,比较完毕后向后挪一位继续比较下面两个相邻数大小,重复此步骤,直到最后一个尚未归位数,已经归位数则无需再进行比较。...(left,i-1); //继续处理左边,这里是一个递归过程 quicksort(i+1,right); //继续处理右边,这里是一个递归过程 return; } int...第2行有n个空格隔开正整数,为每本书ISBN号(1~1000)。 输出有2行,第1行为一个正整数k,表示需要买多少本书。...第2行为k个空格隔开正整数,为从小到大已排好序需要购买图书ISBN号。 程序运行时间限制为1秒。

90680

Python基本排序算法比较,sorted实现方法

算法与数据结构基础 查找算法: 二分查找法: 简介:二分查找法又被称为折半查找法,用于预排序查找问题 过程: 如果在列表a中查找元素t,先将列表a中间位置项与查找关键字t比较,如果两者相等,则成功。...否则,将表分为前后两个子表 如果中间位置大于t,则进一步查找前一子表,否则,查找后一子表 重复上述过程 优劣: 时间复杂度为O(log2N),比较快 缺点就是必须是有序列表 排序算法: 冒泡排序 简介:...两两比较大小,如果不满足升序关系,则交换 过程:略 优劣:: 时间复杂度为O(N2),速度较慢 稳定 选择排序 简介:找出最小值,然后放入一个新列表中 过程:略 优劣:: 时间复杂度为O(N2),速度较慢...互换 从i开始向后搜索,找到第一个大于key值A[i],将A[i]和A[j]互换 重复3~4步,直到i = j 优劣:: 平均情况时间复杂度为O(Nlog2N),比较快。...最差情况下时间复杂度为O(N2) Python语言中提供排序算法 内置数据类型list方法sort(),内置函数sorted() 这个底层实现就是归并排序,只是使用了Python无法编写底层实现

68830

JavaScript 实现酷炫粒子追踪动画

每日前端夜话第316篇 翻译:疯狂技术宅 作者:Anna Prenzel 来源:smashingmagazine 正文共:1093 字 预计阅读时间:5分钟 你是否曾经想过花哨、闪闪发光粒子动画分吸引你网站用户注意力...幸运是,没有必要用诸如 Three.js 之类 3D 库进行非常深入图形编程。相反,你需要是 CSS 和 JavaScript 一些基本知识以及轻便动画库(例如 anime.js)。...位置是必需要设置,稍后我们可以 CSS 属性 left 和 top 在页面上自由放置粒子。...螺旋第一个版本 这样,我们得到一个螺旋,每个位置只有一个粒子,但是只有在每个位置生成一个以上粒子时,才能实现真正拖尾效果。为了使轨迹显得浓密,各个粒子位置必须略有不同。...我认为,交错是该库最大优势之一,它使你可以实现出色效果。

2.1K20

Welford算法实现LN方差更新

它使用了一种在线更新算法,速度更快,数值稳定性更好,这篇笔记就当一篇总结。...因为他需要循环两遍原始数据: 第一遍统计,计算均值 第二遍再将样本值和均值计算,得到方差 当数据比较时候,两遍循环耗时也比较多 Naive方法 我们还知道方差和均值一个关系式子 相比Two-pass...最后再分别计算两者均值,通过上述关系式子得到结果 根据维基百科介绍,前面这两种方法一个共同缺点是,其结果依赖于数据排序,存在累加舍入误差,对于大数据集效果较差 Welford算法 此前大部分深度学习框架都采用是...Naive计算方法,后续Pytorch转用了这套算法。...左右两遍,同时乘上N+1,并进行化简,可以得到: 把 挪到右边就可以得到 而根据平方公式特性有 我们将其中一项前面推导得到均值来进行转换 然后替换到前面的公式进行化简就可以得到最终结果

1.3K10

算法创作|Python实现爱心绘制

Python来表达自己心意才是我们浪漫 问题描述 本题要求编写程序,Python来实现“爱心”图案绘制,可以多种方式来绘制。要求:输入代码,输出为心形图案。...还可以另一种方式绘制以及实现颜色填充。 具体代码: ? 运行结果: ? 结语 本题体现Python日常实用,主要实现对工具库灵活运用。...本文章中题目是三人首次合作完成题目,难度不大,能在三人配合下完成。也学会在解决问题时不同思路,例如不能绘制爱心就拆成几部分分别绘制是这次问题关键。...但是在代码上还不够简洁,在今后需改善,我们也会将更多学习成果得以运用。 实习编辑:王晓姣 稿件来源:深度学习与文旅应用实验室(DLETA)

99030

PHP 方式实现各类算法合集

简易结构 ├──Package │ ├── Sort 排序篇 │ │ ├── BubbleSort.php 冒泡排序 │ │ ├── QuickSort.php...│ └── BigSmallReplace.php Hello World 输出 Olleh Dlrow │ ├──LICENSE └──README.md 递归和循环简单比较...而循环是从简单问题出发,一步步向前发展,最终求得问题,是正向。 任意循环都是可以递归来表示,但是想用循环来实现递归(除了单向递归和尾递归),都必须引入栈结构进行压栈出栈。...一般情况下,算法中基本操作重复执行次数是问题规模n某个函数,T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)极限值为不等于零常数,则称f(n)是T(n)同数量级函数...可变空间,这部分空间主要包括动态分配空间,以及递归栈所需空间等。这部分空间大小与算法有关。 一个算法所需存储空间 f(n) 表示。

1K71

PHP实现URL转换短网址算法

短网址(Short URL) ,顾名思义就是在形式上比较网址。在Web 2.0今天,不得不说,这是一个潮流。...目前已经有许多类似服务,借助短网址您可以简短网址替代原来冗长网址,让使用者可以更容易分享链接。 下面是PHP实现短网址转换算法,代码如下: <?...php //短网址生成算法 class ShortUrl { //字符表 public static $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz...> 通常我们四组网址中第一组即可。...这里需要注意是,这个算法是不可逆,因此,通常做法是将短网址和对应原网址存入数据库,当访问时,从数据库中取出匹配原网址,通过301或header进行跳转。

93320
领券