选择、冒泡、快速排序
排序作为算法当中很重要的一块,也是面试官喜欢考的东西,今天给大家分享三种比较简单且基本的排序方式。如下代码所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
var arr=[3,6,7,1,8,2,5,4,9,0]
//冒泡排序
function getRank(arr){
var num=null;
for(var i=0; i<arr.length-1;i++){//遍历数组至倒数第二位,所以length减1
for(var j=i+1;j<arr.length;j++){//从原数组的第二位开始遍历,所以i+1
if(arr[i]>arr[j]){//数组的第一位arr[i],与数组的第二位arr[j]比较
//此时arr[j]是较小的值,要将较小的值给arr[i]存储,所以:
num=arr[j];//将较小的值给num存储
arr[j]=arr[i];//然后将较大的值给arr[j],让arr[j]又与下一位比较
arr[i]=num;//再将较小的值给arr[i]
}
}
}
return arr
}
//快速排序
function getRank(arr){
//如果数组长度小于1直接返回
if(arr.length<=1){
return arr;
}
var arrIndex=Math.floor(arr.length/2)//获取中间值,这是个索引值
var arrCenterVal=arr.splice(arrIndex,1)//利用索引取出中间值
var left=[],//存储比中间值小的
right=[];//存储比中间值大的
for(var i=0;i<arr.length;i++){
if(arr[i]<arrCenterVal){//如果小于中间值
left.push(arr[i])//比中间值小的放数组left
}else{
right.push(arr[i])//比中间值大的放数组right
}
}
//递归执行以上操作,知道数组长度小于等于1
return getRank(left).concat(arrCenterVal,getRank(right))
}
//选择排序 这个就不写注释了,自己试着理解下吧,有问题,请评论
function getRank(arr){
var max;
var index;
for(var i=0;i<arr.length-1;i++){
max=arr[i];
index=i;
for(var j=i+1;j<arr.length;j++){
if(arr[j]>max){
max=arr[j]
index=j;
}
}
arr[index]=arr[i];
arr[i]=max;
}
return arr;
}
</script>
</body>
</html>