0

0

使用 JavaScript 实现插入排序以按升序对数字数组进行排序

WBOY

WBOY

发布时间:2023-08-23 21:33:02

|

2459人浏览过

|

来源于tutorialspoint

转载

使用 javascript 实现插入排序以按升序对数字数组进行排序

数组排序的艺术在编程领域至关重要,因为它可以有效地组织和操作数据。当谈到实现可靠的排序算法时,插入排序成为一种通用且有效的选择。在本文中,我们深入研究 JavaScript 的复杂世界,探索实现插入排序以按升序排列数字数组的过程。通过理解该算法的基本机制并利用 JavaScript 的强大功能,开发人员可以释放有效排序和组织数值数据的潜力,从而提高应用程序的性能和可用性。

问题陈述

当前的挑战涉及利用 JavaScript 实现插入排序算法的任务,以便按升序排列数字数组。主要目标是设计一个程序,可以智能地重新排列给定数组的元素,确保每个后续元素根据其数值放置在相对于前面元素的正确位置。举个例子,假设我们提供了一个数组

[9, 2, 7, 4, 1]

执行插入排序算法后,预期结果将是一个遵循递增顺序的数组,例如

[1, 2, 4, 7, 9]

方法

在本文中,我们将看到多种不同的方法来解决 JavaScript 中的上述问题 -

立即学习Java免费学习笔记(深入)”;

  • 基本插入排序

  • 二进制插入排序

  • 递归插入排序

方法一:基本插入排序

基本插入排序算法在数组中维护一个已排序的子数组。从第二个元素开始,每个元素与子数组中的前一个元素进行比较,如果较小则向右移动。此过程将持续进行,直到找到正确的位置并插入该元素。对所有元素重复此过程,从而产生完全排序的数组。

示例

insertionSort 函数将数组 arr 作为输入,并返回使用插入排序算法排序的数组。它从第二个元素开始迭代,并将其存储在当前变量中。 while 循环将当前元素与已排序子数组中的先前元素进行比较,将较大的元素向右移动。循环继续,直到到达数组的开头或找到更小的元素。然后将当前元素插入到已排序子数组中的正确位置。对所有元素重复此过程,从而产生排序数组。

ReportPlus数据报表中心小程序
ReportPlus数据报表中心小程序

ReportPlust意在打造一套精美的数据报表模板,里面高度封装日历组件、表格组件、排行榜组件、条形进度条组件、文本块组件以及ucharts的多个图表组件,用户只需要按照虚拟数据的格式,传特定数据即可方便、快捷地打造出属于自己的报表页面。该小程序主要使用了ucharts和wyb-table两插件实现的数据报表功能。 特点使用的是uni-app中最受欢迎的图表uCharts插件完成图表展示,该插件

下载
function insertionSort(arr) {
   for (let i = 1; i < arr.length; i++) {
      let current = arr[i];
      let j = i - 1;
      while (j >= 0 && arr[j] > current) {
         arr[j + 1] = arr[j];
         j--;
      }
      arr[j + 1] = current;
   }
   return arr;
}
 
const arr = [9, 2, 7, 4, 1];
console.log(insertionSort(arr));

输出

以下是控制台输出 -

[ 1, 2, 4, 7, 9 ]

方法二:二分插入排序

二分插入排序算法通过在已排序的子数组中利用二分搜索来确定每个元素的正确位置,从而提高了基本插入排序的效率。不是线性搜索,而是通过将当前元素与子数组的中间元素进行比较来执行二分搜索,并相应地调整搜索边界。确定插入点后,将向右移动元素以腾出空间,然后插入当前元素。对所有元素重复此过程,从而产生完全排序的数组。

示例

binaryInsertionSort 函数采用数组 arr 并返回使用二进制插入排序算法排序的数组。它从第二个元素开始迭代,假设第一个元素已排序。当前元素存储在当前变量中。该算法在已排序的子数组中执行二分搜索,通过将当前元素与中间元素进行比较并调整搜索边界来找到当前元素的正确位置。一旦找到位置,算法就会将元素向右移动并将当前元素插入到正确的位置。对所有元素重复此过程,从而产生排序数组。

function binaryInsertionSort(arr) {
   for (let i = 1; i < arr.length; i++) {
      let current = arr[i];
      let left = 0;
      let right = i - 1;
      while (left <= right) {
         let mid = Math.floor((left + right) / 2);
         if (current < arr[mid]) {
            right = mid - 1;
         } else {
            left = mid + 1;
         }
      }
      for (let j = i - 1; j >= left; j--) {
         arr[j + 1] = arr[j];
      }
      arr[left] = current;
   }
   return arr;
}
 
const arr = [9, 2, 7, 4, 1];
console.log(binaryInsertionSort(arr));

输出

以下是控制台输出 -

[ 1, 2, 4, 7, 9 ]

方法三:递归插入排序

递归插入排序算法是插入排序的递归版本,使用递归对数组进行排序。对于大小为 1 或更小的子数组,它认为它们已经排序。对于较大的子数组,它会递归调用自身来对没有最后一个元素的子数组进行排序。递归调用返回并对子数组进行排序后,算法将最后一个元素放置在已排序子数组中的正确位置。这是通过将最后一个元素与已排序子数组中的元素进行比较并在必要时将它们向右移动来实现的。重复该过程,直到所有元素都插入到正确的位置,从而形成完全排序的数组。

示例

recursiveInsertionSort 函数递归地将插入排序算法应用于输入数组。它检查数组是否已经排序,如果是则返回。否则,它会在大小为 n - 1 的子数组上递归调用自身。递归调用后,该函数使用 while 循环将最后一个元素与已排序子数组中的元素进行比较。如果某个元素较大,则会将其向右移动。此过程持续进行,直到循环到达数组的开头或找到更小的元素。最后,最后一个元素被插入到正确的位置。对所有元素重复此过程,从而产生排序数组。

function recursiveInsertionSort(arr, n = arr.length) {
   if (n <= 1) return arr;
 
   recursiveInsertionSort(arr, n - 1);
 
   let last = arr[n - 1];
   let j = n - 2;
 
   while (j >= 0 && arr[j] > last) {
      arr[j + 1] = arr[j];
      j--;
   }
 
   arr[j + 1] = last;
 
   return arr;
}
 
const arr = [9, 2, 7, 4, 1];
console.log(recursiveInsertionSort(arr));

输出

以下是控制台输出 -

[ 1, 2, 4, 7, 9 ]

结论

最终,使用 JavaScript 实现插入排序算法以升序排列数字数组,对于寻求熟练排序方法的开发人员来说是一个精明的选择。通过迭代地将元素放置在适当的位置,该算法展示了一种组织数值数据的敏锐方法。虽然插入排序可能不像其他排序技术那样广受好评,但它的效率和简单性使其在某些情况下成为非常宝贵的工具。在 JavaScript 中使用此算法使开发人员能够在其编码库中使用鲜为人知但功能强大的工具,从而生成精简且有序的数组。总之,利用 JavaScript 中插入排序算法的强大功能,对于那些在数组排序中寻求精确性和优雅性的人来说,是一种不切实际的努力。

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

546

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

373

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

729

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

471

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

394

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

990

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

655

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

547

2023.09.20

漫蛙2入口地址合集
漫蛙2入口地址合集

本专题整合了漫蛙2入口汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号