JS实现排序算法

卫衣 / 双肩包 / T 恤/羽绒服等任选,下单送 CSDN 年卡 程序员周边任选一款实物,直接赠送 CSDN 会员年卡+ Coding Plan,写代码学习装备一起拿下 阅读详情

在这里插入图片描述

1. BubbleSort

  • 基本思想:依次比较相邻两个数,较大的数下沉,较小的数冒起来。
  • 优化: 设置flag 排好序后终止多余的循环
  • 平均时间复杂度:O(n2)
	let temp
    let flag
    var arr = [20, 17, 13, 28, 14, 23, 15, 42]
    for (let i = 0; i < arr.length; i++) {
    // 只需要循环
      flag = true
      for (let j = arr.length - 1; j > i; j--) {
      	// 从后往前比较,每次最小值会被冒泡到数组最前面
        // console.log(j)
        if ( arr[j] < arr[j-1]) {
          temp = arr[j]
          arr[j] = arr[j-1]
          arr[j-1] = temp
          flag = false
        }
      }
      if (flag) {
        break
      }
    }
    console.log(arr)

2. SelectionSort

  • 基本思想:第一次遍历找到最小的数与第一个元素交换,依次类推…。
  • 平均时间复杂度:O(n2)
	let temp
    var arr = [20, 17, 13, 28, 14, 23, 15, 42]
    for (let i = 0; i < arr.length; i++) {
      console.log(i + '----------' , arr)
      for (let j = i + 1; j < arr.length; j++) {
        if ( arr[j] < arr[i]) {
          temp = arr[i]
          arr[i] = arr[j]
          arr[j] = temp
        }
      }
    }
    console.log(arr)

3. InsertionSort

  • 基本思想:假设前n-1个已经排好序了,将第n个从后往前比较,遇到比自己大的就交换位置,插入到数组中,使得前n个是排好序的,以此类推
  • 平均时间复杂度:O(n2)
	let temp
    var arr = [20, 17, 13, 28, 14, 23, 15, 42]
    for (let i = 0; i < arr.length - 1; i++) {
      for (let j = i + 1; j > 0; j--) {
        if ( arr[j] < arr[j-1]) {
          temp = arr[j]
          arr[j] = arr[j-1]
          arr[j-1] = temp
        } else {
          break
        }
      }
    }
    console.log(arr)

4. Shell Sort

  • 基本思想:
    在要排序的一组数中,根据某一增量分为若干子序列,并对子序列分别进行插入排序。
    然后逐渐将增量减小,并重复上述过程。直至增量为1,此时数据序列基本有序,最后进行插入排序。
  • 平均时间复杂度:
	let temp
    var arr = [10, 8, 3, 2, 5, 9, 4, 7, 35, 46, 6]
    var incre = [7, 3, 1]
    for (let k = 0; k < incre.length; k++) {
      let step = incre[k]
      for (let i = step; i < arr.length; i++) {
        for (let j = i; j >= step; j-=step) {
          if(arr[j] < arr[j-step]) {
            temp = arr[j]
            arr[j] = arr[j-step]
            arr[j-step] = temp
          }
        }
      }
    }
    console.log(arr)

5. Quicksort

  • 基本思想:
    先从数列中取出一个数作为key值;
    将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边;
    对左右两个小数列重复第二步,直至各区间只有1个数。
  • 平均时间复杂度:O(N*logN)
	// 递归
	var arr = [10, 8, 3, 2, 5, 9, 4, 7, 35, 46, 6]
    function quickSort(arr) {
      let smallerArr = []
      let greaterArr = []
      let key= arr[0]
      if(arr.length === 0) {
        return []
      }
      for (let i = 1; i < arr.length; i++) {
        if(arr[i] < key) {
          smallerArr.push(arr[i])
        } else {
          greaterArr.push(arr[i])
        }
      }
      return quickSort(smallerArr).concat([key], quickSort(greaterArr))
    }
    console.log(quickSort(arr))

	// 挖坑填数
	var arr = [10, 8, 3, 2, 5, 9, 4, 7, 35, 46, 6]
    function quickSort(arr, l, r) {
      if(l>=r) {
        return
      }
      // debugger
      let i = l
      let j = r
	  // 将每一轮比较的数保存在key里面
      let key = arr[l]
      while(i < j) {
        while(i< j && arr[j] >= key) {
          j--
        }
        if(i < j) {
          arr[i] =  arr[j]
          i++
        }
        while(i<j && arr[i] < key) {
          i++
        }
        if(i<j) {
          arr[j] = arr[i]
          j--
        }
      }
      // i == j 最终 key左边都比key小,右边都比key大
      arr[i] = key
      quickSort(arr, 0, i-1)
      quickSort(arr, i+1, r)
    }
    quickSort(arr, 0, arr.length -1)
    console.log(arr)

6. Mergesort

  • 基本思想:
    将数列分为若干个小数列,考虑将有序数列合并
  • 平均时间复杂度:O(NlogN)
    归并排序的效率是比较高的,设数列长为N,将数列分开成小数列一共要logN步,每步都是一个合并有序数列的过程,时间复杂度可以记为O(N),故一共为O(N*logN)。
	var arr = [36,20,17,13,28,14,23,15]
    function mergeArray(a,first,middle,last) {
      let i = first
      let j = middle
      let temp = []

      while(i<= middle - 1 && j<=last) {
        if(a[i] < a[j]) {
          temp.push(a[i++])
        } else {
          temp.push(a[j++])
        }
      }
      while(i<= middle - 1) {
        temp.push(a[i++])
      }
      while( j<=last) {
        temp.push(a[j++])
      }
      for (let k = 0; k < temp.length; k++) {
        arr[first + k] = temp[k]
      }
    }
    function mergeSort(arr, first, last ) {
      if(first < last) {
        let middle
        if (Math.round(last + first + 1) % 2 === 0) {
          middle = Math.round(last + first + 1) / 2
        } else {
          middle = Math.round(last + first ) / 2
        }
        mergeSort(arr, first, middle - 1)
        mergeSort(arr, middle, last)
        mergeArray(arr, first, middle, last)
      }
      return arr
    }
    console.log(mergeSort(arr, 0, arr.length - 1))
MSPM0 Type-C在线烧录全解析:从原理到批量生产实践 在线烧录技术是现代嵌入式系统开发中的基础环节,通过内置Bootloader实现固件的远程更新。其核心原理是利用芯片的启动序列检测特定条件,切换至烧录模式后通过USB协议完成数据传输。这种技术显著降低了硬件复杂度与生产成本,特别适用于物联网设备和便携仪器等需要快速迭代的场景。以MSPM0系列微控制器为例,其Type-C接口整合了供电、调试与烧录功能,通过UniFlash工具链可实现从开发到量产的平滑过渡。实际应用中需重点关注Boot引脚配置、选项字节保护等工程细节,避免因电压波动或协议识别失败导致的烧录中断。 阅读详情

相关推荐

使用JavaScript实现排序算法

最近在准备春招面试,远在美国大半个月了一直都没有接到面试电话。很是灰心难过。但是学习还是要继续,生活总是要继续,菜鸟总有一天会高飞呀!不管怎么样,还是学习吧!1. 冒泡排序冒泡排序是我记得最牢的了,可能是因为它的思想最简单,重复走过要排序的序列,一次比较两个元素,如果顺序错误就把它们调整过来(升序)。一直重复工作,知道把最大的元素一步步下沉到数组的尾部function BubbleSort(arr...

LXY224的博客 3509

排序算法js实现

排序算法js实现

I大俊 613

十大经典排序算法js实现

十大经典排序算法JS实现方式

zeroJustGG的博客 485

JS实现5种排序算法

1、冒泡排序 人们开始学习排序算法时,通常都先学冒泡算法,因为它在所有排序算法中最简单。然而,从运行时间的角度来看,冒泡排序是最差的一个。 冒泡排序过程:比较任何两个相邻的项,如果第一个比第二个大,则交换它们。元素项向上移动至正确的顺序,就好像气泡升至表面一样,冒泡排序因此得名。代码实现如下: function bubbleSort(arr){ var len = arr...

狗哥的博客 972

JavaScript实现几种排序算法

关于归并排序---递归实现 // 归并排序中的——治 // 解释各参数的意思: // arrB为待排序列, arrN为临时序列, lHead表示左边起始的排序位置, rHead表示右边起始的排序位置,rEnd表示结束位置 function Merge(arrB, arrN, lHead, rHead, rEnd){ let lEnd = rHead - 1 //假设两个序列紧靠在一起, ...

qq_39373532的博客 278

用JavaScript实现排序算法

第一轮结束,后面的依次类推。

2501_93882087的博客 798

用javascript实现各种排序算法

用javascript实现各种排序算法 1.冒泡排序 思路:遍历序列中的所有元素进行两两比较 ① 需要两次循环 ② 外循环表示要遍历的轮数 ③ 内循环表示每一轮要两两比较的次数 <script> var arr = [75,1,2,88,0,-55]; function bubbleSort(arr){ for(var i = 0;i<arr.le...

qq_41564928的博客 233

JavaScript实现选择排序算法

一、选择排序原理 选择排序是从数组的第一个数开始,和其他元素逐一进行比较,并将最小数放到数组的第一个位置,第一轮比结束。然后从重新排序的数组中的第二个数开始(此时第一个数已经是最小的)再次和其他元素逐一进行比较。重复这一过程,直到数组中只剩最后一个数没有进行逐一比较(因为此时最后一个数已经是最大值)。 二、JS实现快速排序 首先定义一个待排序的数组: var arr = [6,4,2,5,1]; ...

技术无止境,人生仍探索。 531

JavaScript实现十种经典排序算法(js排序算法)

冒泡排序算法 冒泡排序(Bubble Sort)是一种简单直观的排序算法。冒泡排序算法的步骤描述如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 JavaSc

欢迎.... 924

JS实现排序算法(1)(冒泡,选择,插入,归并)

JavaScript学习笔记 排序算法JS实现) 1. 准备工作 function ArrayList(){ var array = []; this.insert = function(item){ array.push(item); } this.toString=function () { return array.join(...

weixin_44039750的博客 211

六大排序算法的javascript实现

排序算法一共八种,分别为冒泡,选择,插入,希尔,归并,快排,堆排序,基数排,这里我只总结六大常见排序并用js来进行实现。至于每种排序算法的原理细节,读者可以参考其他人专门的博客进行学习,还有堆排序和基数排序不是很常用,读者也可以自行学习。 1.冒泡排序 function bubleSort(arr){ for(var i=arr.length-1;i>=0;i--){ ...

lyj223061的博客 228

JavaScript实现排序算法

JavaScript实现排序算法 javascript 数据结构与算法源码 目录JavaScript实现排序算法一、大O表示法二、排序算法1.冒泡排序2.选择排序3.插入排序4.希尔排序5.快速排序 一、大O表示法 大O表示法: 在计算机中采用粗略的度量来描述计算机算法的效率,这种方法被称为**“大O”表示法** 在数据项个数发生改变时,算法的效率也会跟着改变。所以说算法A比算法B快两倍,这样的比较是没有意义的。 因此我们通常使用算法的速度随着数据量的变化会如何变化的方式来表示算法的效率,大O表示法就是方

雨的印记的博客 223

JavaScript实现十大排序算法

JavaScript实现十大排序算法

weixin_43526403的博客 3157

JavaScript的排序算法实现

前言 说起排序,绝对是每个计算机相关专业的数据结构课本里必须出现的词,期末考试试卷上最后一题也是跟这个相关,还记得当时的我还是大二,还是那么的…,当是在课本里学到的排序也是有很多种,我们一般有以下几种 文章目录冒泡排序插入排序选择排序 冒泡排序 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有...

pz1021的博客 195

十大排序算法(JavaScript 实现

排序算法通过排列一组数据中的元素,使其按照特定规则排列。常见的排序算法包括冒泡排序、简单选择排序、快速排序、归并排序等。本文档将展示这些算法的实现思路,提供代码示例和解释。

qq_50708187的博客 1061

排序算法JS实现

排序算法JS实现) 1.冒泡排序(最大值置尾排序) let arr = [1,4,5,23,5,4,3,4,24,32,54,35,234,42]; for(let i=0;i<arr.length;i++){ for(let j=0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1]){ let n =arr[j]; arr[j]=arr[j+1]; arr[

weixin_44543419的博客 295

01 【JS排序算法】JavaScript实现冒泡排序

写在前面 本文是学习"ben大叔"大佬的相关文章所总结而成。 作为一名前端,你可以不了解复杂的一些算法实现,但是关于排序算法你可要了解和掌握哦,比如以下这几种: 冒泡排序简介 冒泡排序作为排序算法家族中的成员来说,相当于编程语言学习中的"Hello World",因为它是最简单的排序算法。冒泡排序会重复走访待排序序列,每次会比较序列中的相邻两个元素,如果这两个元素的顺序错误,就将它俩位置互换,依次重复进行此操作,直到待排序序列中没有要进行交换的操作为止,就意味着已经完成了排序。由于冒泡排序.

X北辰北的博客 978

基本排序算法的JavaScript实现

最近,复习了一下基本的排序算法,以前在校使用C语言实现的,现在由于自己做的是前端开发,所以就动手使用JavaScript实现了一些基本排序算法

Herbert的专栏 465
上一篇: 《React-Hooks 介绍》
下一篇: 面试题:在浏览器输入url后发生了什么
MoveLikeRabbit
博客等级 码龄9年 5粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值