当前位置: 首页 > news >正文

排序算法整理

一、排序算法的分类

1.插入类排序

军训时,在一只有序队伍中,新来一个,教官要求新来的迅速找到自己的位置。

例:直接插入排序折半插入排序

 

2.交换类排序

军训刚开始,一群新生需要排队,教官说,“你比你旁边的高,你俩换一下,怎么换完还高,再换......”

例:冒泡排序快速排序

 

3.选择类排序

每一趟选出最小(或最大)的一个。比如军训排队,教官说,“你们都别动,我看看谁个字最小,你和第一个换一下,剩下的我继续选......”

例:简单选择排序堆排序

 

4.归并类排序

将两个或两个以上的有序序列合并成一个新的有序序列。继续军训排队,教官让每个人和旁边的人组成一个二人组,二人组内部先排好,二人组再和旁边的二人组组成新的四人组,依旧内部排序...... 最终会合并到一个组。

例:二路归并排序

 

5.基数类的排序

基于多关键字排序的思想。例如,一副去掉大小王的52张扑克牌进行基数排序,先按花色(红桃、黑桃、方片、梅花)排序,这样分成了4堆,然后每一堆从 A 到 K 排序。

 

二、JavaScript排序算法实现

1.直接插入排序

let arr = [49, 38, 65, 97, 76, 13, 27, 49]
let i = 0
let temp, j
let n = arr.length
/*非递减排序*/
for (i+1; i<n; i++) {
    temp = arr[i]
    j = i-1
    while (j>=0 && temp<arr[j]) {
        arr[j+1] = arr[j]
        --j
    }
    arr[j+1] = temp
}
console.log(arr)     //[13, 27, 38, 49, 49, 65, 76, 97]

2.希尔排序

let arr = [49, 38, 65, 97, 76, 13, 27, 49, 55, 4]
let gaps = [5, 3, 1]
let i = 0, j = 0, n = 0, temp
/*非递减排序*/
for (n; n<gaps.length; n++) {
    for (i=gaps[n]; i<arr.length; i++) {
        temp = arr[i]
        for (j=i; j>=gaps[n] && arr[j-gaps[n]]>temp; j=j-gaps[n]) {
            arr[j] = arr[j-gaps[n]]
        }
        arr[j] = temp
    }
}

 

3.冒泡排序

let arr = [49, 38, 65, 97, 76, 13, 27, 49, 55, 4]
let i = 0
let j = 0
/*非递减排序*/
for (i; i<arr.length; i++) {
    for (j=i+1; j<arr.length; j++) {
        if (arr[i]>arr[j]) {
            let k = arr[i]
            arr[i] = arr[j]
            arr[j] = k 
        }
    }
}

4.快速排序

let arr = [49, 38, 65, 97, 76, 13, 27, 49, 55, 4]
/*非递减排序*/
function quickSort (arr_) {
    let left =[]
    let right = []
    let m, temp
    let i=0
    if (arr_.length<=1) {
        return arr_
    }
    m = Math.floor(arr_.length/2)
    temp = arr_.splice(m, 1)
    for (i; i<arr_.length; i++) {
        if (arr_[i]<temp) {
            left.push(arr_[i])
        } else {
            right.push(arr_[i])
        }
    }
    console.log('left:'+left)
    console.log('right:'+right)
    console.log('temp:'+temp)
    return quickSort(left).concat(temp, quickSort(right))
}
console.log(quickSort(arr))

5.选择排序

let arr = [49, 38, 65, 97, 76, 13, 27, 49, 55, 4]
let i = 0
let j = 0
let k, temp
/*非递减排序*/
for (i; i<arr.length; i++) {
    min_ = arr[i]
    k = i
    for (j=i+1; j<arr.length; j++) {
        if (arr[j]<min_) {
            min_ = arr[j]
            k = j
        }
    }
    temp = arr[i]
    arr[i] = min_
    arr[k] = temp
}
console.log(arr)

 

分类参考天勤计算机考研高分笔记系列第8版,2020版数据结构

JavaScript算法参考简书 https://www.jianshu.com/p/da9e31c485c2

转载于:https://www.cnblogs.com/zhuxingqing/p/11211089.html

相关文章:

  • ArrayList 源码分析 基于jdk1.8:
  • ConcurrentHashMap 源码分析,基于JDK1.8
  • CopyOnWriteArrayList 源码分析 基于jdk1.8
  • CopyOnWriteArraySet 源码分析
  • CountDownLatch 源码分析
  • HashMap 源码分析 基于jdk1.8分析
  • ReentrantLock 锁释放源码分析
  • ReentrantReadWriteLock 源码分析
  • 线程池 ThreadPoolExecutor 类的源码解析
  • 线程池的状态整理
  • 004 DOM01
  • Idea 2018版破解
  • windows如何解除端口占用?
  • Luogu3919 【模板】可持久化数组(主席树)
  • Red Hat开发最新Linux操作系统桌面linux操作系统
  • 【译】理解JavaScript:new 关键字
  • Asm.js的简单介绍
  • download使用浅析
  • javascript从右向左截取指定位数字符的3种方法
  • js学习笔记
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • MobX
  • MySQL数据库运维之数据恢复
  • Nodejs和JavaWeb协助开发
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 那些被忽略的 JavaScript 数组方法细节
  • 爬虫模拟登陆 SegmentFault
  • 七牛云假注销小指南
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 使用SAX解析XML
  • 微服务核心架构梳理
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 一起参Ember.js讨论、问答社区。
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #define,static,const,三种常量的区别
  • #if #elif #endif
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (12)Hive调优——count distinct去重优化
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Git) gitignore基础使用
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (黑马C++)L06 重载与继承
  • (十六)串口UART
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • .bat批处理(一):@echo off
  • .form文件_一篇文章学会文件上传
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Core中Emit的使用