冒泡排序,选择排序,快速排序

冒泡排序:

核心:两个for循环嵌套,每一轮都会比上一轮少循环一次,每次循>环都拿第一个位置和后面那个位置的值相比,如果前面的大,就交换两个值

function bubble(arr){
   for(var i=1; i<arr.length; i++){
       //每一轮排序下来都可以确定最后是最大的,所以每进行一轮都可以少循环一次
      for(var j=0; j<arr.length-i; j++){ 
          if(arr[j]>arr[j+1]){
             var temp=arr[j];
             arr[j]=arr[j+1];
             arr[j+1]=temp;
           }
       }
   }
   return arr;
}
   var arr=[1,99,3,44,5,6]
   console.log(bubble(arr));

选择排序

function select(arr1){
    //每一轮过后都能确定最前面那个是最小值,所以下一轮拿下一个值来对比
   for(var i=0; i<arr1.length; i++){
       var min=i;  //每一轮都拿上一轮的第一个后的一个来当做最小的和后面的比较
       for(var j=i+1; j<arr1.length; j++){
          if(arr1[j]<arr1[min]){
              min=j;
           }
       }
       //判断当前最小下标是否为开始的默认值,若不是则交换位置,把最小的值换到最前面
       if(min!=i){//每一轮都要判断一次 !!!!
          var temp=arr1[min];
          arr1[min]=arr1[i];
          arr1[i]=temp;
       }
    }
    return arr1
}
var arr1=[1,8,44,3,7];
console.log(select(arr1));

快速排序(利用递归)

function quick(arr2) {
   if (arr2.length <= 1) {
       return arr2;
    }
    //定义左边数组、右边数组和基数
    var left = [], right = [], mid = arr2[0];
    for (var i = 1; i < arr2.length; i++) {
    //判断数组中的数是大于基数还是小于基数,大于的再left数组,小于的在right数组
         arr2[i] < mid ? left.push(arr2[i]) : right.push(arr2[i]);
    }
    return quick(left).concat([mid], quick(right));//mid是数值,只有数组才能连接
}
var arr2=[2,6,77,3,4,9]
console.log(quick(arr2));
posted @ 2022-07-29 19:42  喜欢四季的春天  阅读(19)  评论(0编辑  收藏  举报