博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于数组(笔记,更新ing)
阅读量:6795 次
发布时间:2019-06-26

本文共 2749 字,大约阅读时间需要 9 分钟。

排序

1.冒泡排序
let arr = [1,3,4,2,7,5,6,8]    function bubleSort(arr) {    var len = arr.length;    for (let outer = len ; outer >= 2; outer--) {        for(let inner = 0; inner <=outer - 1; inner++) {        	console.log("outer:"+outer)        	console.log("inner:"+inner)            if(arr[inner] > arr[inner + 1]) {                [arr[inner+1],arr[inner]] = [arr[inner],arr[inner+1]]            }        }    }    return arr;}bubleSort(arr)console.log(arr)复制代码

关于冒泡排序有个细节就是,即使是数组已经完成排序,循环也不会停止。 打印出来的outerinner如图所示:

所以可以做出优化如下:

let arr = [1,3,4,2,7,5,6,8]    function bubleSort(arr) {    var len = arr.length;    for (let outer = len ; outer >= 2; outer--) {    	let completeSort = true        for(let inner = 0; inner <=outer - 1; inner++) {        	console.log("outer:"+outer)        	console.log("inner:"+inner)            if(arr[inner] > arr[inner + 1]) {                [arr[inner+1],arr[inner]] = [arr[inner],arr[inner+1]]                completeSort = false            }        }        if(completeSort){        	break        }    }    return arr;}bubleSort(arr)console.log(arr)//[1,2,3,4,5,6,7,8]复制代码

我们依然打印出outerinner

我们会发现,其实再最完成循环到
outer=6之时,数组已经完成了排序。

2.选择排序
let arr = [1,3,4,2,7,5,6,8]function selectSort(arr) {    var len = arr.length;    for(let pos = 0 ;pos < len - 1; pos++) {        for(let cur = pos ; cur

选择排序实现思路就是依次将数组的每一项元素都与所有其他元素比较大小,而后依照排列规则调换位置。

3.插入排序
let arr = [1,3,4,2,7,5,6,8]function insertSort(arr) {    for(let i = 1; i < arr.length; i++) {          for(let j = i; j > 0; j--) {             if(arr[j] < arr[j-1]) {                [arr[j],arr[j-1]] = [arr[j-1],arr[j]];                console.log(arr)            } else {                break;            }        }    }    return arr;}insertSort(arr)复制代码

插入排序就是默认arr[0]这一段是有序的(只有一个元素当然是有序的咯),然后往这个有序片段里面插入元素,插入的方法是将无序片段(也就是首项之后的所有元素的片段)的每一项与有序片段里的每一段对比,按照规则将无序片段中的元素插入到有序片段中,从始至终保证有序片段的“纯净”。因为是与有序片段对比,所以如果与有序末尾的最后一个元素对比结果是不进入if的话,那后面也没需要对比,可以直接break了,这是需要注意的地方。

*快速排序
function quickSort(arr) {	debugger    if(arr.length <= 1) {        return arr //递归出口    }    var left = [],        right = [],        current = arr.splice(0,1); //注意splice后,数组长度少了一个    for(let i = 0; i < arr.length; i++) {        if(arr[i] < current) {            left.push(arr[i])  //放在左边        } else {            right.push(arr[i]) //放在右边        }    }      return quickSort(left).concat(current,quickSort(right)); //递归}复制代码

如代码所示,快速排序就是将每个元素与一个基准元素比较大小,然后按照规则判断这个元素是放在这个基准的左边还是右边,重复执行就可以得到一个有序的数组了。比如说一群人按身高来列队,我们将没有列好的队伍中选出一个人出列,作为基准,然后让所有身高比他高的站他右边,比他矮的站他左边。但是这样只操作一次肯定是得不到一个整齐的队伍的,所以我们还要对基准左右两边的人再进行这个操作。

至于为什么是current = arr.splice(0,1),是因为当最后left或者right中只剩余2个元素的时候,这两个元素间依然是要排序的,所以为了保证取到current,就必须是splice(0,1)或者splice(1,1),是不可随机选择的。

转载于:https://juejin.im/post/5cc185c46fb9a0323070d629

你可能感兴趣的文章
【mysql基础】02、数据库基础
查看>>
JTable 使用细讲
查看>>
CentOS 安装Oracle 11G 参数配置
查看>>
异步超时后直接返回
查看>>
企业网下の帧中继网络
查看>>
我的友情链接
查看>>
F5新型数据中心防火墙
查看>>
Exchange2010和2013共存后IMAP问题
查看>>
38 tomcat lb cluster、memcached和msm、msm及jvm虚拟机性能监控、tcpdump和nc工具的使用...
查看>>
Tomcat JVM优化一例
查看>>
给U盘加个回收站
查看>>
ifconfig
查看>>
Oracle 数据库归档满处理办法
查看>>
Linux双网卡绑定脚本
查看>>
udev控制磁盘引导顺序
查看>>
Linux下SCP拷贝文件
查看>>
Android消息机制(一)
查看>>
Lenovo Thinks Station E32 (I217-LM网卡) 安装ESXi 5.1
查看>>
阵列波导光栅
查看>>
我的友情链接
查看>>