1,冒泡排序
原理:相邻的两个数互相比较,按照从小到大排列,进行比较时前一个数如果比后一个数大则两个数互换位置,相互比较完一轮最大的数就会到最后面,并且不再参与比较,然后再循环比较,直到比较完成。
var arr1 = [23, 43, 4543, 45, 546546, 67, 764, 45, 22, 34, 66, 88]
function pao(arr) {
var len = arr.length; //获取数组长度
for (var i = 0; i < len - 1; i++) { // 第一层循环
for (var j = 0; j < len - 1 - i; j++) { // 第二层循环,每确定一个数循环就减少一次,数组的长度减1再减去当前数组长度
if (arr[j] > arr[j + 1]) { // 相邻两数相比较 前一个数比后一个数大 两数则互换位置
var num = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = num
}
}
}
return arr
}
console.log(pao(arr1)) // 输出结果[22, 23, 34, 43, 45, 45, 66, 67, 88, 764, 4543, 546546]
2,快速排序
原理:新建两个空数组分别为left和right,从数组中选出中间数,然后把数组中的每一项与中间数做比较,小的放入left数组,大的放入right数组。然后再用这样的方法比较新数组。直到比较完成,再把left和中间数和rignt连接为一个数组则排序完成。
var arr=[2,4,6,88,78,67,65,9,12];
function quicklySort(list){
if(list.length <= 1 ){ //判断如果数组长度<=1,表示数组只有一个内容或没内容,直接返回本身
return list;
}
var n = Math.floor(list.length / 2);//数组的中间数下标
var num = list.splice(n,1)[0];//数组的中间数
var left = [],right = []; //新建两个空数组用来接收比较后的数
for(var i=0;i<list.length;i++){ 开始循环
if(list[i] < num){ 如果要比较的数小于中间数则放入left 否则放入right
left.push(list[i])
}else{
right.push(list[i])
}
}
return quicklySort(left).concat([num],quicklySort(right)) 把left,nun,right连接成一个数组
}
console.log(quicklySort(arr));// 输出结果 [2, 4, 6, 9, 12, 65, 67, 78, 88]
好了,今天就暂时到这里了,想知道更多的可以点个关注,
愚才疏学浅,故难免错漏,敬请海涵,还望不吝指出,万分感激!!!
网友评论