javascript 的几种排序方法

JS Function 名称排序 根据JS 函数名字,进行排序,应用场景为格式化函数列表 立即下载

直接插入排序基本思想
    假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。

    算法描述
 function InsertSort(arr) { //插入排序->直接插入法排序
  var st = new Date();
  var temp, j;
  for(var i=1; i<arr.length; i++) {
   if((arr[i]) < (arr[i-1])) {
    temp = arr[i];
    j = i-1;
    do {
     arr[j+1] = arr[j];
     j--;
    }
    while (j>-1 && (temp) < (arr[j]));
    arr[j+1] = temp;
   }//endif
  }
  status = (new Date() - st) + ' ms';
  return arr;
 }


希尔排序基本思想
   先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
   该方法实质上是一种分组插入方法。

    算法描述

 function ShellSort(arr) { //插入排序->希儿排序
  var st = new Date();
  var increment = arr.length;
  do {
   increment = (increment/3|0) + 1;
   arr = ShellPass(arr, increment);
  }
  while (increment > 1)

  status = (new Date() - st) + ' ms';
  return arr;
 }
 function ShellPass(arr, d) { //希儿排序分段执行函数
  var temp, j;
  for(var i=d; i<arr.length; i++) {
   if((arr[i]) < (arr[i-d])) {
    temp = arr[i]; j = i-d;
    do {
     arr[j+d] = arr[j];
     j = j-d;
    }
    while (j>-1 && (temp) < (arr[j]));
    arr[j+d] = temp;
   }//endif
  }
  return arr;
 }


冒泡排序基本思想
    将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。


    算法描述
 function BubbleSort(arr) { //交换排序->冒泡排序
  var st = new Date();
  var temp;
  var exchange;
  for(var i=0; i<arr.length; i++) {
   exchange = false;
   for(var j=arr.length-2; j>=i; j--) {
    if((arr[j+1]) < (arr[j])) {
     temp = arr[j+1];
     arr[j+1] = arr[j];
     arr[j] = temp;
     exchange = true;
    }
   }
   if(!exchange) break;
  }
  status = (new Date() - st) + ' ms';
  return arr;
 }

 

快速排序基本思想
    将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
    在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos-1)和R[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字pivot.key,右边的子区间中所有记录的关键字均大于等于pivot.key,而基准记录pivot则位于正确的位置(pivotpos)上,它无须参加后续的排序。

    算法描述
 function QuickSort(arr) { //交换排序->快速排序
  if (arguments.length>1) {
   var low = arguments[1];
   var high = arguments[2];
  } else {
   var low = 0;
   var high = arr.length-1;
  }
  if(low < high){
   // function Partition
   var i = low;
   var j = high;
   var pivot = arr[i];
   while(i<j) {
    while(i<j && arr[j]>=pivot)
     j--;
    if(i<j)
     arr[i++] = arr[j];
    while(i<j && arr[i]<=pivot)
     i++;
    if(i<j)
     arr[j--] = arr[i];
   }//endwhile
   arr[i] = pivot;
   // end function
   var pivotpos = i; //Partition(arr,low,high);
   QuickSort(arr, low, pivotpos-1);
   QuickSort(arr, pivotpos+1, high);
  } else
   return;
   return arr;
 }

直接选择排序基本思想
   n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:
 ①初始状态:无序区为R[1..n],有序区为空。
 ②第1趟排序
    在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
  ……
 ③第i趟排序
  第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R[i..n](1≤i≤n-1)。该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第1个记录R[i]交换,使R[1..i]和R[i+1..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
    这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。

    算法描述
 function SelectSort(arr) { //选择排序->直接选择排序
  var st = new Date();
  var temp;
  for(var i=0; i<arr.length; i++) {
   var k = i;
   for(var j=i+1; j<arr.length; j++) {
    if((arr[j]) < (arr[k]))
     k = j;
   }
   if (k != i){
    temp = arr[i];
    arr[i] = arr[k];
    arr[k] = temp;
   }
  }
  status = (new Date() - st) + ' ms';
  return arr;
 }

================================================================================
<style>
fieldset {
 font-size:12px;
 padding:10px;
 width:80%;
 margin:auto;
}
input {
 font-size:12px;
 font-family:Tahoma;
}
</style>
<title>排序</title>
<h3 align="center">排序</h3>
<fieldset>
<legend>插入排序</legend>

<p><b>直接插入排序</b>
请输入一段要排序的字符,用半角逗号隔开
<input name=insert type=text size=100 value="g,v,u,f,p,o,i,a,t,j,e,l,k">
<br><input type=button value=" 排序 " onclick="alert(InsertSort(insert.value.split(',')));">

<p><b>希儿排序</b><br>
  <input name=Shell type=text size=100 value="g,v,u,f,p,o,i,a,t,j">
<br><input type=button value=" 排序 " onclick="alert(ShellSort(Shell.value.split(',')));">

</fieldset>
<p>
<fieldset>
<legend>交换排序</legend>

<b>冒泡排序</b><br>
<input name=bubble type=text size=100 value="g,v,u,f,p,o,i,a,t,j,e,l,k">
<br><input type=button value=" 排序 " onclick="alert(BubbleSort(bubble.value.split(',')));">

<p><b>快速排序<br>
</b>
  <input name=quick type=text size=100 value="3,1,5,4,6">
<br><input type=button value=" 排序 " onclick="alert(QuickSortDemo(quick.value.split(',')));">

</fieldset>
<p>
<fieldset>
<legend>选择排序</legend>

<b>直接选择排序</b><br>
<input name=select1 type=text size=100 value="g,v,u,f,p,o,i,a,t,j,e,l,k">
<br><input type=button value=" 排序 " onclick="alert(SelectSort(select1.value.split(',')));">

<p>... ...

</fieldset>


<script>
 function InsertSort(arr) { //插入排序->直接插入法排序
  var st = new Date();
  var temp, j;
  for(var i=1; i<arr.length; i++) {
   if((arr[i]) < (arr[i-1])) {
    temp = arr[i];
    j = i-1;
    do {
     arr[j+1] = arr[j];
     j--;
    }
    while (j>-1 && (temp) < (arr[j]));
    arr[j+1] = temp;
   }//endif
  }
  status = (new Date() - st) + ' ms';
  return arr;
 }


 function ShellSort(arr) { //插入排序->希儿排序
  var st = new Date();
  var increment = arr.length;
  do {
   increment = (increment/3|0) + 1;
   arr = ShellPass(arr, increment);
  }
  while (increment > 1)

  status = (new Date() - st) + ' ms';
  return arr;
 }
 function ShellPass(arr, d) { //希儿排序分段执行函数
  var temp, j;
  for(var i=d; i<arr.length; i++) {
   if((arr[i]) < (arr[i-d])) {
    temp = arr[i]; j = i-d;
    do {
     arr[j+d] = arr[j];
     j = j-d;
    }
    while (j>-1 && (temp) < (arr[j]));
    arr[j+d] = temp;
   }//endif
  }
  return arr;
 }


 function BubbleSort(arr) { //交换排序->冒泡排序
  var st = new Date();
  var temp;
  var exchange;
  for(var i=0; i<arr.length; i++) {
   exchange = false;
   for(var j=arr.length-2; j>=i; j--) {
    if((arr[j+1]) < (arr[j])) {
     temp = arr[j+1];
     arr[j+1] = arr[j];
     arr[j] = temp;
     exchange = true;
    }
   }
   if(!exchange) break;
  }
  status = (new Date() - st) + ' ms';
  return arr;
 }

 function QuickSortDemo(arr) {
  var st = new Date();
  var result = QuickSort(arr);
  status = (new Date() - st) + ' ms';
  return result;
 }

 function QuickSort(arr) { //交换排序->快速排序
  if (arguments.length>1) {
   var low = arguments[1];
   var high = arguments[2];
  } else {
   var low = 0;
   var high = arr.length-1;
  }
  if(low < high){
   // function Partition
   var i = low;
   var j = high;
   var pivot = arr[i];
   while(i<j) {
    while(i<j && arr[j]>=pivot)
     j--;
    if(i<j)
     arr[i++] = arr[j];
    while(i<j && arr[i]<=pivot)
     i++;
    if(i<j)
     arr[j--] = arr[i];
   }//endwhile
   arr[i] = pivot;
   // end function
   var pivotpos = i; //Partition(arr,low,high);
   QuickSort(arr, low, pivotpos-1);
   QuickSort(arr, pivotpos+1, high);
  } else
   return;
   return arr;
 }
 
 /*function Partition(arr, i, j) { //快速排序, 对待排序的数组进行划分
  var pivot = arr[i];
  while(i<j) {
   while(arr[j]>=pivot)
    j--;
   if(i<j)
    arr[i++] = arr[j];
   while(arr[i]<=pivot)
    i++;
   if(i<j)
    arr[j--] = arr[i];
  }
  arr[i] = pivot;
  return arr;
 }*/

 function SelectSort(arr) { //选择排序->直接选择排序
  var st = new Date();
  var temp;
  for(var i=0; i<arr.length; i++) {
   var k = i;
   for(var j=i+1; j<arr.length; j++) {
    if((arr[j]) < (arr[k]))
     k = j;
   }
   if (k != i){
    temp = arr[i];
    arr[i] = arr[k];
    arr[k] = temp;
   }
  }
  status = (new Date() - st) + ' ms';
  return arr;
 }
 

 function unicode(str) {//求字符串的unicode码
  var uni=0;
  for(var i=0; i<str.length; i++){
   uni += str.charCodeAt(i)/6553.5 * Math.pow(10, str.length-i);
  }
  return uni;
 }
</script>
 

根据对象的某一属性进行排序的js代码(如:name,age) 代码如下: //定义一个对象数组    var data = [{ name: “jiang”, age: 22 }, { name: “AAAAAAAAAAAAAA”, age: 21 }, { name: “CCCCCCCCc”, age: 25}];    //定义一个比较器 function compare(propertyName) { return function (object1, object2) { var value1 = object1[propertyName]; var value2 = object2[propertyName]; if (value2 < val 立即下载

相关推荐

从SPI协议到文件系统:手把手教你用HAL库给W25Q16移植FATFS(附扇区管理优化方案)

本文详细介绍了如何在STM32平台上,通过HAL库的SPI接口为W25Q16 Flash芯片移植FATFS文件系统。文章从SPI通信基础讲起,深入解析了FATFS底层驱动(diskio.c)的移植要点,并重点探讨了针对W25Q16的4KB物理扇区特性进行扇区管理优化的两种方案,旨在帮助开发者构建稳定高效的文件存储方案。

happy2的博客 1043

JavaScript的几种排序方法

所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。其确切定义如下:  输入:n个记录R1,R2,…,Rn,其相应的关键字分别为K1,K2,…,Kn。  输出:Ril,Ri2,…,Rin,使得Ki1≤Ki2≤…≤Kin。(或Ki1≥Ki2≥…≥Kin)。    这里,我们简单介绍几种排序方法,直接插入排序、希儿排序、冒泡排序、快速排序、直接选择排序,文中所提及的代码在IE6下

ξσ Dicky's Blog σξ 2821

别再为OpenBCI_GUI安装发愁了!保姆级教程带你从Processing配置到成功运行(附常见错误解决)

本文提供了一份详细的OpenBCI_GUI安装教程,涵盖从Processing配置到成功运行的全过程,特别针对常见错误提供了解决方案。通过环境搭建、软件依赖安装、源码处理及首次运行实战,帮助用户高效完成数据可视化工具的部署与使用。

weixin_28366475的博客 271

js自由拖拽来排序的功能案例

在日常项目中,标签的拖拽移动来进行排序的功能还是比较常用的,因最近项目有一个需求 “拖拽菜单进行排序”, 在网上也查了相关案例吧,基于别人的一个拖拽函数;在其基础上进行使用; 我们先来看看需求,如【微信公众号后台——自定义菜单】里面的菜单排序排序的功能; 好的,需求明了~ 开始我的代码编写,编写了一个比较易懂的案例,然后大家可以根据自己的结构进行套用,先看看我的效果: html结构: <...

阿里巴啦的博客 7620

MediaPipe实战:从零构建人脸关键点检测应用

本文详细介绍了如何使用Google的MediaPipe框架从零构建一个实时人脸关键点检测应用。文章深入剖析了MediaPipe的三段式检测流水线,提供了Android平台的完整实战教程,包括环境配置、模型加载、摄像头集成、关键点绘制以及性能调优指南,帮助开发者快速实现高效、跨平台的人脸AR特效与交互功能。

weixin_29100927的博客 343

LabVIEW状态机实战:用STM32+DHT11搭建温湿度监测系统(附完整VI源码)

本文详细介绍了如何利用LabVIEW状态机模式与STM32微控制器、DHT11温湿度传感器构建温湿度监测系统。通过硬件选型、状态机设计、LabVIEW程序实现及系统优化等环节,提供了一套完整的解决方案,并附有VI源码,助力开发者快速实现嵌入式温湿度监测应用。

weixin_42549723的博客 523

js排序

js排序

zzs891103的专栏 622

深入解析Simulink中的条件执行子系统:If Action与Switch Case的实战应用

本文深入解析了Simulink中两种核心的条件执行子系统:If Action Subsystem与Switch Case Action Subsystem。通过实战案例详细阐述了其工作原理、正确搭建方法以及与逻辑控制器(If模块/Switch Case模块)的协同机制,帮助工程师实现清晰、可维护的多分支逻辑控制,并规避常见建模错误。

l3m4n的博客 429

js 分享一个匹配文字排序的算法

先使用两个数组分别存放 后缀带文字的和不带文字的,使用sort方法将截取出的字段排序,再将存放带文字数组的数据匹配插入。需求:根据字段“storageAreaName”的后3位数字排序,如果有文字的话自动排到该条数据后面。

a6588433的博客 407

LE AUDIO---Volume Control Service

LE AUDIO---Volume Control Service

weixin_42162924的博客 164

最强AI插件Augment,适配idea、vscode,对标cursor!

Augment是一款新兴的AI辅助编码工具,能够无缝集成到IDEA和VS Code等主流IDE中,直接对标专业AI编码工具Cursor。其核心优势包括多IDE适配、无缝集成、代码理解与生成以及对话式编程体验。Augment通过插件形式保留原IDE功能和快捷键习惯,降低学习成本,同时提供深度理解项目上下文和生成高质量代码的能力。此外,Augment还具备审查变更、检查点、代理与代理自动等核心功能,支持从简单配置更改到复杂功能实现的各种开发任务。Augment代表了AI辅助编程工具的新方向,通过增强开发者熟悉的

todoitbo的博客 1万+

js实现基本排序算法(二)

选择排序 选择排序,就是在一个无序数组中,一个指针i遍历从前到后所有的数组元素的下标,一个指针j在当前下标后面的位置中找到最应该放到i位置的元素,然后两两交换。 //选择排序 // 在各种情况下复杂度波动小,因此一般是优于冒泡排序 时间复杂度 O(n*n) var arr = [3,2,5,8,4,7,9,6,1]; function s...

Reilyyy的博客 630

【AI智能体】Spring AI Tool 从使用到实战详解

Spring AI Tool

congge 5866

js数组排序的几种方法

// sort() 数组对象排序 var arr = [ {name:"小恭",age:11}, {name:"小发",age:3}, {name:"小喜",age:12}, {name:"小财",age:40} ]; console.log(arr); console.log(arr[0]); var c...

渐渐高飞 3万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

js中数组排序的几种方法

<script> vararr2=[9,88,67,24,39,74,28]; //sort排序 arr2.sort(function(a,b){ returna-b }) console.log(arr2); //冒泡排序 for(vari=0;i<arr2.length;i++){ for(vark=0;k<arr2.le...

qq_47355431的博客 271

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

js的几种排序方法

大家在数据结构中都学习到各种排序的方法,下面是关于js排序的几种方法,跟C语言数据结构中讲的大同小异,希望能够对大家的工作和学习有所帮助 1、直接插入排序基本思想 假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。 ...

有问题吗? 776

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

js中数组排序常用的几种方法

js中数组排序(冒泡、快速、插入) 1.冒泡排序法 将数组中的相邻两个元素进行比较,将比较大(较小)的数通过两两比较移动到数组末尾(开始),执行一遍内层循环,确定一个最大(最小)的数,外层循环从数组末尾(开始)遍历到开始(末尾) function MaoPaoSort(arr){ for(var i = 0;i<arr.length-1;i++) { for(var j = 0;j<arr.length-i-1;j++){

zzh990822的博客 3861

js排序的几种方法

js排序的几种方法 使用sort进行排序 var arr = [1,2,4,6,4,6,3,6,8,54,4,565,54] var res = arr.sort(function(a,b){ return a-b }) console.log(res) // sort 降序 var res2 = arr.sort(function(a,b){ return b

Stride的博客 458

JS的几种排序方法

1.冒泡排序思路: 依次比较相邻的两个数,如果第一个比第二个小,不变。如果第一个比第二个大,调换顺序。一轮下来,最后一个是最大的数,之后对除了最后一个之外的数重复第一步,直到只剩一个数。 缺点:循环次数多,占用内存大 代码:function bubbleSort(myArray){ var len = myArray.length; var i; var j; var stop

qq_30206797的博客 882

JavaScript中几种数组排序方法

冒泡排序 function bubbleSort(arr) { for (let i = arr.length - 1; i >= 0; i--) { for (let j = i; j < arr.length; j++) { if (arr[j] > arr[j + 1]) { //相邻两项比较 ...

sunxinfang111的博客 219

js 的几种排序方法sort()

一、普通数组排序   js中用方法sort()为数组排序。sort()方法有一个可选参数,是用来确定元素顺序的函数。如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序。如: var arr = ["a", "b", "A", "B"]; arr.sort(); console.log(arr);//["A", "B", "a", "b&

Smile_xu_OoO的博客 9022

js几种常见排序方法

下面主要是对冒泡排序、选择排序、快速排序、插入排序的js实现的回顾。 1.  冒泡排序  定义: 比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个 数据交换。  这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。  N=N-1,如果N不为0就重复前面二步,否则排序完成。   function bubbleSort(arr){       ...

yijiupingfan0914的博客 1595
上一篇: 各类网页弹窗代码编写
下一篇: 使用VSIUAL C#.NET操作Excel -把DataTable中的数据写入Excel
netcpl
博客等级 码龄21年 2粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值