IT袋

当前位置:主页 > 经验教程 > 建站编程 >

js将一个数组分割成多个数组的数据

js将一个数组分割成多个数组的数据 关于js在数组中查找指定元素

更新:2023-08-20 06:48:09 来源:IT袋 作者:苏晓敏
导读:js将一个数组分割成多个数组的数据,正文核心介绍:js将一个数组分割成多个数组的数据和关于js在数组中查找指定元素的教程内容,接下来一起来看看吧。 插入排序 假设第一项已经排序好了,将它和第二项

js将一个数组分割成多个数组的数据

正文核心介绍:js将一个数组分割成多个数组的数据和关于js在数组中查找指定元素的教程内容,接下来一起来看看吧。

插入排序

假设第一项已经排序好了,将它和第二项作比较,判断第二项是否和它交换位置,以此类推来完成排序。

js将一个数组分割成多个数组的数据

源码:

import { defaultCompare} from "../utils/index.js";function insertSort(array, compareFn = defaultCompare) { let temp; for (let index = 1; index < array.length; index++) { let key = index; temp = array[index]; while (key > 0 && compareFn(array[key - 1], temp) === 1) { array[key] = array[key - 1] key--; } array[key] = temp; } return array;}const arr = [3, 5, 2, 1, 3, 7, 0]console.log(insertSort(arr))

代码的循环体中的index是从1开始的,因为第0项我们已经假设它排序好了,直接把它和第二项作比较。

归并排序

JavaScript中的Array类定义了一个sort函数【Array.prototype.sort】,用来排序JavaScript数组,这里面它没有说明用的是哪一种排序算法,所以浏览器厂商可以自己实现算法。比如火狐浏览器使用了归并排序作为Array.prototype.sort的实现,而谷歌【V8引擎】使用了一个快速排序的变体。

归并排序是一种分而治之的算法,思路是将原数组拆分为比较小的数组,直到每个小数组只有一个位置,再将小数组归并成比较大的数组,最后只有一个排序完成的数组。

归并排序也是使用了递归的方式,首先要定义两个函数,一个负责将大数组拆分为小数组的函数,一个是调用用来排序的辅助函数

js将一个数组分割成多个数组的数据

代码:

function mergeSort(array, compareFn = defaultCompare) { if (array.length > 1) { const { length } = array; const middle = Math.floor(array.length / 2); const left = mergeSort(array.slice(0, middle), compareFn); const right = mergeSort(array.slice(middle, length), compareFn); array = merge(left, right, compareFn) } return array;}

辅助排序函数:merge

function merge(left, right, compareFn) { let i = 0; let j = 0; const result = []; while (i < left.length && j < right.length) { result.push(compareFn(left[i], right[j]) === -1 ? left[i++] : right[j++]); } return result.concat(i < left.length ? left.slice(i) : right.slice(j));}

快速排序

快速排序也是分而治之的算法,同样也是将数组拆分为多个较小的数组,它和归并排序不同的是拆分数组的方式不同。

js将一个数组分割成多个数组的数据

思路:

1、从数组中选择一个值作为pivot,也就是数组中的那个值

2、创建两个指针,左指针指向数组的第一个值,右指针指向数组的最后一个值。移动左指针一直找到比pivot大的值,然后交换它们。重复这个流程直到左指针超过了右指针。最后把比pivot小的值排在pivot前面,比pivot大地值排在pivot后面。

import { swap, defaultCompare} from "../utils/index.js";function quickSort(array, compareFn = defaultCompare) { // left指向数组首位,right指向数组末位 return quick(array, 0, array.length - 1, compareFn)}function quick(array, left, right, compareFn) { let index; if (array.length > 1) { index = partition(array, left, right, compareFn); if (left < index - 1) { quick(array, left, index - 1, compareFn); } if (index < right) { quick(array, index, right, compareFn) } } return array}// 划分function partition(array, left, right, compareFn) { const pivot = array[Math.floor(right + left) / 2]; let i = left; let j = right; while (i <= j) { while (compareFn(array[i], pivot) === -1) { i++; } while (compareFn(array[j], pivot) === 1) { j--; } if (i <= j) { swap(array, i, j); i++; j--; } } return i}

这样在JavaScript中很容易超出最大调用栈。

计数排序

计数排序是一个分布式排序,使用已经组织好的辅助数据结构,然后进行合并,完成排序任务。

相关阅读

  • 创建免费网站的方法 免费建自己的网址步骤

    创建免费网站的方法 免费建自己的网址步骤

    今天小编介绍创建免费网站的方法和免费建自己的网址步骤的电脑方面的小经验,下面为详细的介绍。 学习网页编程,制作了几个网页,必须要服务器才能展示吗? 只要gitee或者github就可以了

  • 服务器地址在哪里看 获取外网ip地址的方法

    服务器地址在哪里看 获取外网ip地址的方法

    跟大家说一说服务器地址在哪里看和获取外网ip地址的方法方面的内容,一起跟随小编看看吧! 说到DNS服务器地址,那么就要先科普一下什么是DNS? DNS:是域名系统 (Domain Name System)的缩写,是

  • 一键搭建网站工具怎么用 免费一键搭建网站的方法

    一键搭建网站工具怎么用 免费一键搭建网站的方法

    您可能不了解一键搭建网站工具怎么用和免费一键搭建网站的方法的话题,一起跟随小编看看吧! 想自己创业一个电商网站但不知道要怎么开?下面IT袋网小编就教你如何使用在线搭建工具乔

  • 如何自己搭建服务器主机 个人搭建云服务器的步骤

    如何自己搭建服务器主机 个人搭建云服务器的步骤

    本文核心内容:如何自己搭建服务器主机和个人搭建云服务器的步骤的电脑方面的小经验,具体详情如下: 1、首先windows+r键打开运行窗口输入OptionalFeatures打开windows功能开启与关闭。 2、找到