冒泡排序
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
基本原理
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
具体看冒泡算法
如图:
//看代码
<script type="text/javascript">
function mPao(val){
var com = null
//外层循环控制的比较的轮数
for (var i = 0; i < val.length-1; i++) {
//内层循环控制的是每一轮比较的次数
for(var j=0;j<val.length-1-i;j++){
if(val[j]>val[j+1]){
com = val[j]
val[j]=val[j+1]
val[j+1]=com
}
}
}
return val
}
let arr = [12,1,5,8,9,15]
arr=mPao(arr)
console.log(arr) //1,5,8,9,12,15
</script>
插入排序
插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动 。
基本思想
插入排序的工作方式像许多人排序一手扑克牌。开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较。拿在左手上的牌总是排序好的,原来这些牌是桌子上牌堆中顶部的牌
具体请看插入排序
如图:
//看代码
<script type="text/javascript">
function crPxu(ary){
//首先得准备一个空闲的手leftCon 准备去拿牌
let leftCon = []
//然后拿一张放在手里,目的是为了让新拿的牌和手里这张进行比较
leftCon.push(ary[0])
for (let i = 1; i < ary.length; i++) {
//D是新抓的牌
let D = ary[i]
//然后和leftCon 手里的牌一次比较(从后向前比)
for (let j = leftCon.length - 1; j >= 0; j--) {
//每次要比较手里的牌
let S = leftCon[j]
//如果新牌D比 要和手里比较的牌S大的话,D放在S的后面
if(D>S){
leftCon.splice(j+1,0,D)
break
}
//比到第一项,把新牌放到手中最前面即可
if(j===0){
leftCon.unshift(D)
}
}
}
return leftCon
}
let arr = [12,1,5,8,9,15]
arr=crPxu(arr)
console.log(arr) //1,5,8,9,12,15
</script>
快速排序
快速排序(Quicksort)是对冒泡排序算法的一种改进。
具体请看快速排序
如图:
//看代码
<script type="text/javascript">
function quick(val){
//4.用来结束递归,如果数组的长度小于等于1,则返回val
if(val.length<=1){
return val
}
//1.找到数组的中间项
let middleIndex = Math.floor(val.length/2)
//1.1 移除中间项
let middleValue = val.splice(middleIndex,1)[0]
//2.准备左右两个空数组,
let leftVal =[],
rightVal = [];
//循环剩下数组中的每一项
for(let i=0;i<val.length;i++){
//比当前项小的放在左边数组中,反之放在右边数组中
let item = val[i]
item<middleValue?leftVal.push(item):rightVal.push(item)
}
//3.递归方式让左右两边的数组持续处理,一直到左右两边数组排好序,最后用concat,拼接成最后的结果
return quick(leftVal).concat(middleValue,quick(rightVal))
}
let arr = [12,1,5,8,9,15]
arr=quick(arr)
console.log(arr) //1,5,8,9,12,15
</script>
更多算法 ,这里为大家推荐一篇比较好的文章
值得收藏的十大经典排序算法
版权声明:本文为weixin_44637104原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。