JavaScript版快速排序增强版

作者:caocao(网络隐士),http://www.caocao.name,http://www.caocao.mobi
转载请注明来源:http://caocao.iteye.com/blog/123721

对于某些只读的HTML collection来说,普通排序方法无法对其进行排序,于是隐士想到了编写一个增强版的JavaScript版快速排序程序。该排序除了接收可读写的一个数组外,还接收一个实现了compare, swap接口的变量。可读写的数组由调用者根据只读collection生成,具体的交换过程在swap中由用户自行实现,这样可以改善系统提供的排序的局限性。至于debug接口,可以选择不实现,在不实现debug的情况下,不会造成排序性能损失。

java 代码
  1. var sortContainer=   
  2. {   
  3.     compare: function(v1, v2)   
  4.     {   
  5.         if (v1==v2)   
  6.             return 0;   
  7.         else if (v1<v2)   
  8.             return -1;   
  9.         else  
  10.             return 1;   
  11.     },   
  12.   
  13.     swap: function(i1, i2)   
  14.     {   
  15.     },   
  16.        
  17.     debug: function(message)   
  18.     {   
  19.         document.getElementById("DebugDiv").innerHTML+=message+"<br/>";   
  20.     }   
  21. }   
  22.   
  23. function quickSort(a, container)   
  24. {   
  25.     if (a==null)   
  26.         return;   
  27.     var length=a.length;   
  28.     if (length<2)   
  29.         return;   
  30.     function internalQuickSort(lowIndex, highIndex, a, container)   
  31.     {   
  32.         if (lowIndex<highIndex)   
  33.         {   
  34.             var pos=internalPartition(lowIndex, highIndex, a, container);   
  35.             internalQuickSort(lowIndex, pos-1, a, container);   
  36.             internalQuickSort(pos+1, highIndex, a, container);   
  37.         }   
  38.     }   
  39.     function internalPartition(lowIndex, highIndex, a, container)   
  40.     {   
  41.         var pivot=a[lowIndex];   
  42.         var lowI=lowIndex;   
  43.         var highI=highIndex;   
  44.         while (true)   
  45.         {   
  46.             do {lowI++;} while (container.compare(a[lowI], pivot)<0);   
  47.             while (container.compare(a[highI], pivot)>0) {highI--;}   
  48.             if (lowI>=highI) break;   
  49.             var tmp=a[lowI];   
  50.             a[lowI]=a[highI];   
  51.             a[highI]=tmp;   
  52.             container.swap(lowI, highI);   
  53.             if (container.debug) container.debug("* "+lowI+"("+a[highI]+") -&gt; "+highI+"("+a[lowI]+") ["+a.join(",")+"]");   
  54.         }   
  55.         if (lowIndex!=highI)   
  56.         {   
  57.             a[lowIndex]=a[highI];   
  58.             a[highI]=pivot;   
  59.             container.swap(lowIndex, highI);   
  60.             if (container.debug) container.debug(lowIndex+"("+a[highI]+") -&gt; "+highI+"("+a[lowIndex]+") ["+a.join(",")+"]");   
  61.         }   
  62.         return highI;   
  63.     }   
  64.     if (container.debug) container.debug("["+a.join(",")+"]");   
  65.     internalQuickSort(0, length-1, a, container);   
  66.     if (container.debug) container.debug("["+a.join(",")+"]");   
  67. }   
  68.   
  69. var a=new Array(1,3,8,2,4,6,5,7,40,35,67,82,23,31,2,3,45);   
  70. quickSort(a, sortContainer);  

SAP SD实战:用BADI_SLS_HEAD_SCR_CUS给销售订单VA01/VA02加自定义字段(附完整函数组代码) 本文详细解析了在SAP SD模块中如何利用BADI_SLS_HEAD_SCR_CUS实现销售订单(VA01/VA02)的屏幕增强,包括数据结构设计、函数组创建和BADI接口实现。通过实战案例和完整代码,帮助开发者掌握在SAPMV45A标准流程中添加自定义字段的关键技术,提升业务定制化能力。 阅读详情

相关推荐

FOC时序及电流采样注意事项

摘要:本文介绍了无刷电机FOC(磁场定向控制)的实现方法,重点解析了电流采样时序与PWM同步的关键技术。在S32K144平台上,需使用两个独立的ADC组件实现双路电流同步采样,采样时刻必须严格对应低边MOS管开启时间并位于PWM波形中央。文章详细说明了硬件触发时序设计、采样电阻配置原则,并通过示波器实测波形验证了电流反馈电路的正确性,指出正弦电流波形应是理想输出形态。关键点包括ADC-PWM时序同步、低边MOS采样及正确的PWM映射配置。

qq_40916548的博客 2625

快速排序-c\c++版、java版、python版、JavaScript版

c\c++版 void quick_sort_r(int *arr, int start, int end) { if (start > end) return; int left = start, right = end; int mid = arr[start]; while (left < right) { ...

csdn_meng的博客 1万+

从选型到阵列:基于ESP32-S3的智能硬件麦克风系统设计实战

本文详细介绍了基于ESP32-S3芯片设计智能硬件麦克风阵列的完整实战方案。从核心芯片选型、数字MEMS麦克风的参数解读与电路设计,到关键的声学结构密封、阵列布局策略,再到利用ESP-ADF框架构建音频处理流水线并集成回声消除、噪声抑制等算法,提供了从硬件到软件的全链路设计指南与避坑要点,旨在实现清晰、稳定的远场语音交互。

weixin_29173777的博客 267

快速排序[js版]

介绍 快速排序(Quicksort),简称快排。在平均状况下,排序n个项目要 O(nlogn) 次比较。在最坏状况下则需要O(n2)次比较,但这种状况并不常见。 快速排序使用分治法策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列。 快速排序步骤为: 1.挑选基准值:从数列中挑出一个元素,称为“基准” 2.分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成 3

QW's Blog 423

企业微信/飞书/钉钉扫码连WiFi保姆级教程(附访客授权技巧)

本文提供了一份企业微信、飞书、钉钉扫码连接WiFi的实战部署教程。通过集成标准Radius协议与OAuth 2.0,企业可实现基于身份的无密码网络认证,并详细介绍了访客授权、权限分级等精细化管理技巧,有效提升无线网络的安全性与员工体验。

t4y5u6i7o的博客 1195

Python使用netmiko配置华为交换机

1.netmiko就是专门为网络设备做的模块,非常强大。1.更适合网络设备的自动化运维模块。2、批量配置变更、备份。1.安装netmiko。2. 创建SSH连接。一、netmiko介绍。

博然的宝藏库 2797

JavaScript算法——快速排序

一、概念 快速排序算法由 C. A. R. Hoare 在 1960 年提出。它的时间复杂度也是 O(nlogn),但它在时间复杂度为 O(nlogn) 级的几种排序算法中,大多数情况下效率更高,所以快速排序的应用非常广泛。 注意: 快速排序不一定是最快的排序方法,这取决于需要排序的数据结构、数据量。不过,大多数情况下,面试官和工作场所用它的概率也是相对较高的,所以我们应该花时间把它学透彻。 二、工作原理 首先设定一个分界值,通过该分界值将数组分成左右两部分。 将大于或等于分界值的数据集中到数组右边

诸葛韩信--一个前往前端不归路的浪子 6948

17【Protues单片机仿真】基于51单片机的太阳能智能谷物翻晒机器人

基于51单片机,避障,低于50CM报警,LED灯亮起,自动翻晒用光敏电阻,光照强度大,电机转动,相当于翻晒粮食,远程控制用按键代替,按下去电机就转动,相当于翻晒粮食,然后光照强度和超声波的距离都在LCD1602显示屏显示出来。

weixin_70360261的博客 1448

JS实现快速排序

js实现快速排序

xinxxxxxxxxx的博客 1万+

BSL编程语言 —— 系统化程序设计

BSL编程语言简介 文章目录0. 选择编程语言1. 写简单的表达式(Expression) 0. 选择编程语言 如果你第一次使用DrRacket,打开后需要选择Beginning Student Language (BSL) Language -> Choose Language (或直接按Ctrl + L),看到如下洁面后选择Beginning Student,点击OK 定义区【De...

CSDoneRight的博客 6451

idea 编译打包nacos2.0.3源码,生成可执行jar 包常见问题

idea 编译打包nacos2.0.3源码,生成可执行jar 包常见问题

fyihdg的专栏 1218

JS 快速排序

快速排序是一种分置策略的排序算法,运行高效,应用广泛,其核心操作是“哨兵划分”:选择数组中某个元素作为“基准数”,将所有小于基准数的元素放在其左边,大于基准数的元素放在其右边,从而将数组划分成左子数组和右子数组,再分别递归左子数组和右子数组。因为是降序,要保证大的元素交换后在左边,所以依然先移动右指针。先移动左指针,找到第一个比基准数大的元素9, 之后开始移动右指针,当左右指针重合时,右指针没有找到比基准数小的元素,此时交换左指针与基准数的位置,会发现,左子数组中的元素,并不是全都比基准数小。

chris_tangtang的博客 2281

风电功率预测项目技术白皮书:短期、超短期、中长期全尺度算法详解与工程落地

聚焦风电功率预测的时间尺度与算法:短期(0~72h)以XGBoost/LightGBM/CatBoost及深度学习为主,超短期(0~4h)采用ARMA+LSTM,中长期用LightGBM等,并涵盖概率预测、多气象源融合、AI大模型+物理模型混合策略、极端天气应对及工程运维要点。

算法工程师 326

js实现快速排序的两种方法

快速排序 快速排序是对冒泡排序的一种改进,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 说白了就是从一个数组中找到一个数,把比他大的数都放在他的右边,把比他小的数都放在他的左边,然后在分别对左边和右边的数组做同样的事,就排好了。...

软软软的blog 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JS快速排序详解——递归与非递归

基本介绍: 快速排序(quickSort)是基于冒泡排序的一种改进,该排序算法采用了分治的思想,将待排序数组逐步划分两个部分,其中左半部分都要小于右半部分,再将左右部分分别进行快速排序,整个过程可采用递归进行,直到排成一个有序数列。 整体步骤: ① 选取待排序数组中其中一个数作为基数(建议选取第一个数),使flag等于基数的下标,left等于待排序数组第一个数的下标,right等于待排序数组...

徐杨鑫磊的技术博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

js快速排序标准版与简版

快速排序的核心思想非常简单: 在数组中,找一个基准点P,然后splice出去; 将数组中小于改基准点的数据放在一个数组,大于基准点的数据放在一个数组; 对左边的数组进行递归操作,对右边的数组递归操作,最后concat起来,并返回 标准思想: function quickSort(arr) { arr = arr.concat(); if(arr.length&lt;=1)...

m0_38005587的博客 1900

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

js实现快速排序的两种方法,附讲解

本文提供两种JavaScript实现快排方式, 第一种为阮一峰老师所写 原文地址:http://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html 第二种为个人看到讲解比较不错的C++实现(已修改为JavaScript实现) 原文地址:http://blog.youkuaiyun.com/morewindows/article/details/6684558 ​ "快速排序"的思想很简单,整个排序过程只需要三步: ​ (1)在数据集之

weixin_43823444的博客 2833

快速排序之JS实现

关于快速排序的讲解在本人博文快速排序详解中,本门只展示JS的代码实现: const quickSort = (array) => { const sort = (arr, left = 0, right = arr.length - 1) => { if (left >= right) {//如果左边的索引大于等于右边的索引说明整理完毕 return } let i = left let j = right const baseVal = arr[j] // 取无

艺术编程 2220

算法 - 快速排序 - javascript 版

非递归快速排序 function quickSort(num) { const list = [[0, num.length - 1]]; while (list.length > 0) { let now = list.pop(); if (now[0] >= now[1]) { continue; } let i = now[0], j = now[1], flag = now[0]; while (i &l

龙鱼618博客 177

JS快速排序算法

概念 快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 流程 快速排序算法通过多次比较和交换来实现排序,其排序流程如下: 首先设定一个分界值,通过该分界值将数组分成左右两部分...

莉兹Liz的博客 811

【算法篇】快速排序算法JavaScript版

快速排序算法,JavaScript版

AI小美好 711

js实现快速排序

js实现快速排序 基本思想 快速排序是对冒泡排序的改进,基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据要小,然后再按此方法对两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据的有序。 推导过程 动画演示 代码实现 let arr = [7,6,8,1,2,0,4,3,9,5]; function quickSort(arr,left,right){ let l = left;//左下标 let r = right;/

weixin_51445423的博客 2229

JavaScript界面演示 快速排序

不管用什么语言, 思想都一样 做这个首先的会快速排序,这里不解释了,只是走出页面效果 注意:  如果把一条一条div放入数组,那么div交换位置的时候, 注意数组的处理,需要保存左面或右边的left值, 一边下次while的left定位 html 初始化 开始 先沾出来 数组

水神 716

javascript之快速排序

快速排序思想其实还是挺简单的,分三步走:   1、在数组中找到基准点,其他数与之比较。   2、建立两个数组,小于基准点的数存储在左边数组,大于基准点的数存储在右边数组。   3、拼接数组,然后左边数组与右边数组继续执行1、2两个步骤,直到最后完成数组排序。   这里直接上代码:  function quickSort(arr){ if(arr.length){

nobb111的博客 1330

javascript实现快速排序

快速排序: 快速排序是对冒泡排序的一种改进,他是将数组的所有的值与一个key值比较(此值一般为第一个或者最后一个)然后将大于key值的数放在key值又边,小于key值的数放在key值左边。然后分别在对key值左右的无序数组进行上述方法进行递归排序最后当数组排序完成结束排序。 下面是我编写的js代码: function quickSort(arr,left,right) { ...

你若成风,我则化雨 462

js排序算法详解-快速排序

全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解js排序算法详解-快速排序既然是快速排序,那顾名思义一定很快,快的连小编都被懵逼了好几圈!建议先不要看动图,先看第一种写法:6.1 抽象版快速排序function quickSort(array, left, right) {   console.time('1.快速排序耗时');   if (left < right) {

2671
上一篇: 奥斯卡影后珍·惠曼驾鹤西游去也
下一篇: 香港电影中的演员:A字头(持续更新中)
nethermit
博客等级 码龄25年 11粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值