今天突然想回顾一下四大排序,虽然说在实战中没有用到,但是想回顾一下四大排序的思想
 
var arr = [23, 34, 11, 22, 19, 18];
 
1.冒泡排序:
冒泡排序的思路分析:
第1轮 第1步:[23, 34, 11, 22, 19, 18]
第1轮 第2步:[23, 11, 34, 22, 19, 18]
第1轮 第3步:[23, 11, 22, 34, 19, 18]
第1轮 第4步:[23, 11, 22, 19, 34, 18]
第1轮 第5步:[23, 11, 22, 19, 18, 34]
 
第2轮 第1步:[11, 23, 22, 19, 18, 34]
第2轮 第2步:[11, 22, 23, 19, 18, 34]
第2轮 第3步:[11, 22, 19, 23, 18, 34]
第2轮 第4步:[11, 22, 19, 18, 23, 34]
 
第3轮 第1步:[11, 22, 19, 18, 23, 34]
第3轮 第2步:[11, 19, 22, 18, 23, 34]
第3轮 第3步:[11, 19, 18, 22, 23, 34]
 
第4轮 第1步:[11, 19, 18, 22, 23, 34]
第4轮 第2步:[11, 18, 19, 22, 23, 34]
 
第5轮 第1步:[11, 18, 19, 22, 23, 34]
 
//外层的for循环确定轮数
for(var i = 1; i < arr.length; i++) {
// 内层for循环确定每轮的步数
for(var j = 0; j < arr.length - i; j++) {
// 两两比较
if(arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
 
2.选择排序
选择排序的思路分析:
第1轮 第1步:var iMinK = 0;
第1轮 第2步:23 和 34比较,什么也不做
第1轮 第3步:23 和 11比较,iMinK = 2
第1轮 第4步:11 和 22比较,什么也不做
第1轮 第5步:11 和 19比较,什么也不做
第1轮 第6步:11 和 18比较,什么也不做
第1轮 第7步:下标0和下标2进行位置交换 [11, 34, 23, 22, 19, 18]
 
第2轮 第1步:var iMinK = 1;
第2轮 第2步:34 和 23比较,iMinK = 2
第2轮 第3步:23 和 22比较,iMinK = 3
第2轮 第4步:22 和 19比较,iMinK = 4
第2轮 第5步:19 和 18比较,iMinK = 5
第2轮 第6步:下标1和下标5进行位置交换 [11, 18, 23, 22, 19, 34]
 
// 外层for循环确定轮数
for(var i = 0; i < arr.length - 1; i++) {
// 记录最小值的下标
var iMinK = i;
for(var j = i + 1; j < arr.length; j++) {
if(arr[iMinK] > arr[j]) {
iMinK = j;
}
}
// 交换数据
if(iMinK !== i) {
var temp = arr[i];
arr[i] = arr[iMinK];
arr[iMinK] = temp;
}
}
 
3.插入排序
插入排序的思路分析:
第1轮 第1步:[23, 34, 11, 22, 19, 18]
 
第2轮 第1步:[23, 11, 34, 22, 19, 18]
第2轮 第2步:[11, 23, 34, 22, 19, 18]
 
第3轮 第1步:[11, 23, 22, 34, 19, 18]
第3轮 第2步:[11, 22, 23, 34, 19, 18]
第3轮 第3步:[11, 22, 23, 34, 19, 18]
 
第4轮 第1步:[11, 22, 23, 19, 34, 18]
第4轮 第2步:[11, 22, 19, 23, 34, 18]
第4轮 第3步:[11, 19, 22, 23, 34, 18]
第4轮 第4步:[11, 19, 22, 23, 34, 18]
 
第5轮 第1步:[11, 19, 22, 23, 18, 34]
第5轮 第2步:[11, 19, 22, 18, 23, 34]
第5轮 第3步:[11, 19, 18, 22, 23, 34]
第5轮 第4步:[11, 18, 19, 22, 23, 34]
第5轮 第5步:[11, 18, 19, 22, 23, 34]
 
// 外层循环确定轮数
for(var i = 1; i < arr.length; i++) {
// 内层的for循环
for(var j = i; j > 0; j--) {
if(arr[j] < arr[j - 1]) {
var temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
} else {
break;
}
}
}

  

4.快速排序
快速排序的思路分析:
第一步:base = 23 , arr = [35, 34, 11, 22, 19, 18]
第二步:left = [], right = []
第三步:[11, 22, 19, 18] 23 [35, 34]
第四步: [] 11 [22, 19, 18] 23 [34] 35 []
第五步:[] 11 [19, 18] 22 [] 23 [34] 35 []
第六步:[11, 18, 19, 22, 23, 34, 35]
 
var arr = [23, 35, 34, 11, 22, 19, 18, 18];
function quickSort(arr) {
if(arr.length <= 1) {
return arr;
}
var iBase = arr.shift();
var left = [], right = [];
for(var i = 0; i < arr.length; i++) {
if(arr[i] < iBase) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat(iBase, quickSort(right));
}
var newArr = quickSort(arr);
console.log(newArr);
 
JavaScript常见四大排序就是以上四种,虽说在开发中我们或许用不到,但是其思想却值得我们深思,在开发中我们用的多的是思想,一句话没有思路就没有出路。
有问题及时评论,24小时内回复。狗尾草和大家一起努力!
 
 
 
 
 
 

(六)js常见四大排序的更多相关文章

  1. js常见的排序算法

    最近面试可能会问这些 1,插入排序 function sort(elements){ var res =[elements[0]]; for (var i = 0; i < elements.l ...

  2. 常见的排序算法之Java代码解释

    一 简要介绍 一般排序均值的是将一个已经无序的序列数据重新排列成有序的 常见的排序分为: 1 插入类排序 主要就是对于一个已经有序的序列中,插入一个新的记录.它包括:直接插入排序,折半插入排序和希尔排 ...

  3. 常见的排序算法总结(JavaScript)

    引言 排序算法是数据结构和算法之中的基本功,无论是在笔试还是面试,还是实际运用中都有着很基础的地位.这不正直七月,每年校招的备战期,所以想把常见的排序算法记录下来.在本篇文章中的排序算法使用 Java ...

  4. 案例学习总结:原生JS实现表格排序

    最近在学习js的表格排序,没想到看不起眼的表格排序实际上却暗含了众多JS知识点.在这里记录一下此次学习过程.希望对大家也有所帮助. 完整的表格排序涉及了下列这些知识点: call方法使用 sort方法 ...

  5. java讲讲几种常见的排序算法

    java讲讲几种常见的排序算法(一) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 以数组array={6,3,20,8,15,1}为例 冒泡排序 思路:从第0个到 ...

  6. [Python] 常见的排序与搜索算法

    说明: 本文主要使用python实现常见的排序与搜索算法:冒泡排序.选择排序.插入排序.希尔排序.快速排序.归并排序以及二分查找等. 对算法的基本思想作简要说明,只要理解了基本的思想,与实现语言无关. ...

  7. JS中对象排序

    详细代码如下: var s=[{name:"abc",value:10},{name:"dbc",value:5},{name:"acc", ...

  8. C语言中常见的排序方法

    在C语言中,常见的排序方法有冒泡法,排序法,插入法等等.所谓的冒泡法,就是对一组数字进行从大到小或者从小到大的一种排序方法.主要就是相邻的数值相互交换.从第一个数值开始,如果这相邻的两个数值排序与我们 ...

  9. 总结Selenium自动化测试方法(六)常见的异常错误处理

    六.常见的异常错误处理 NoSuchElementException: Message: Unable to locate element: {"method":"xpa ...

随机推荐

  1. hadoop27---netty中handler的执行顺序

    Netty是基于Java NIO的网络应用框架. Netty是一个NIO client-server(客户端服务器)框架,使用Netty可以快速开发网络应用,例如服务器和客户端协议.Netty提供了一 ...

  2. 【Head First Servlets and JSP】笔记1

    1.把Java放到HTML中,JSP应运而生. 2.Servlet本身并没有main()方法,所以必须要有其他Java程序去调用它,这个Java程序就是Web容器(Container).Tomcat就 ...

  3. python步长为负时的情况

    Sequence[start:end:step] python 的序列切片中,第一个:隔离了 起始索引 和 结束索引,第二个:隔离了 结束索引和 步长 step为正,则从左到右切片,如果 start ...

  4. article标准用法

    article代表一个在文档.页面或者网站中自成一体的内容 其目的是为了让开或重用 譬如论坛的帖子.博客的文章.一片用户的评论.一个互动的widget小工具 article 会有一个标题(通常在hea ...

  5. jQuery鼠标滑动切换焦点图

    在线演示 本地下载

  6. 关于ARM指令中位置无关和位置相关代码的认识【转】

    本文转载自:https://blog.csdn.net/talent_CYJ/article/details/50533153 今天在一个问题上折腾了又是半天.就是在学JZ2440串口通信的时候,在s ...

  7. Python中求阶乘(factorial)

    1. math.factorial(x) import math value = math.factorial(x) 2. reduce函数 def factorial(n): return redu ...

  8. 多线程-信号量Semaphore

    计数信号量用来控制同时访问某个特定资源的操作数量.Semaphore可以用于实现资源池,例如数据库连接池.我们可以构造一个固定长度的资源池,当资源池为空的时候,请求资源将会阻塞,而不是失败.当资源池非 ...

  9. 4.微信小程序-B站:先把首页造出来

    (小安娜:失踪人口已上线,大家快来喷喷喷他!),sorry++,最近身边发生太多事情,导致这最关键的实战开篇都未写,(小安娜-分身1:懒就是懒,不负责任,我之前学的都忘了),(小安娜-分身2:上一篇双 ...

  10. codeforces 820A. Mister B and Book Reading 解题报告

    题目链接:http://codeforces.com/problemset/problem/820/A 坑爹题目,坑爹题目,坑爹题目....汗 = =!  后台还110个 test 有个地方需要注意下 ...