JavaScript基础算法之冒泡排序&快速排序

2019-07-15  本文已影响0人  任建坤123

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]

好了,今天就暂时到这里了,想知道更多的可以点个关注,

愚才疏学浅,故难免错漏,敬请海涵,还望不吝指出,万分感激!!!

上一篇 下一篇

猜你喜欢

热点阅读