冒泡排序和快速排序都是js中较为经典的算法,先来说说冒泡排序,它的原理是:
1.比较相邻的两个元素,如果前一个比后一个大,则交换位置。
2.第一轮的时候最后一个元素应该是最大的一个。
3.按照步骤一的方法进行相邻两个元素的比较,这个时候由于最后一个元素已经是最大的了,所以最后一个元素不用比较。
//冒泡排序
var sheng = [123, 122, 4, 633, 5, 1, 3, 522, ];
for (var i = 0; i < sheng.length; i++) {
for (var j = 0; j < sheng.length-i; j++) {
if (sheng[j] > sheng[j + 1]) {
var kong = sheng[j];
sheng[j] = sheng[j + 1];
sheng[j + 1] = kong;
console.log(sheng);
}
}
}
console.log(sheng);
.快速排序:
快速排序是对冒泡排序的一种改进,第一趟排序时将数据分成两部分,一部分比另一部分的所有数据都要小。然后递归调用,在两边都实行快速排序。
<script>
var arr = [123,3,4,5,65,43,67,7,3,5,1,1,3,3,44,65,6]
var times=0;
var quickSort=function(arr){
//如果数组长度小于等于1无需判断直接返回即可
if(arr.length<=1){
return arr;
}
var midIndex=Math.floor(arr.length/2);//取基准点
var midIndexVal=arr.splice(midIndex,1);//取基准点的值,splice(index,1)函数可以返回数组中被删除的那个数arr[index+1]
var left=[];//存放比基准点小的数组
var right=[];//存放比基准点大的数组
//遍历数组,进行判断分配
for(var i=0;i<arr.length;i++){
if(arr[i]<midIndexVal){
left.push(arr[i]);//比基准点小的放在左边数组
}
else{
right.push(arr[i]);//比基准点大的放在右边数组
}
console.log("第"+(++times)+"次排序后:"+arr);
}
//递归执行以上操作,对左右两个数组进行操作,直到数组长度为<=1;
return quickSort(left).concat(midIndexVal,quickSort(right));
};
console.log(quickSort(arr))
</script>