喜迎
春节

JS冒泡选择快速排序


JS冒泡排序(必须掌握思想和必须会代码默写)(面试最常考)

原理:依次比较相邻的两个值,如果后面的比前面的小,则将小的元素排到前面。依照这个规则进行多次并且递减的迭代,直到顺序正确。

var arr=[8,94,15,88,55,76,21,39];
function sortarr(arr){
    for(i=0; i < arr.length-1; i++){
        for(j=0; j < arr.length-1-i; j++){
            if(arr[j] > arr[j+1]){
                var temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    return arr;
}
sortarr(arr);
console.log(arr);

解析
两个循环
当i=0的时候,里面的循环完整执行,从j=0执行到j=6,这也就是第一遍排序,结果是将最大的数排到了最后,这一遍循环结束后的结果应该是[8,15,88,55,76,21,39,94]
当i=1的时候,里面的循环再次完整执行,由于最大的数已经在最后了,没有必要去比较数组的最后两项,这也是j<arr.length-1-i的巧妙之处,结果是[8,15,55,76,21,39,88,94]
说到这里,规律就清楚了,每次将剩下数组里面最大的一个数排到最后面,当第一个循环执行到最后的时候,也就是i=6,此时,j=0,只需要比较数组的第一和第二项,比较完毕,返回。

JS选择排序(了解思想和必须会代码默写)(面试最常考)

原理:首先从原始数组中找到最小的元素,并把该元素放在数组的最前面,然后再从剩下的元素中寻找最小的元素,放在之前最小元素的后面,直到排序完毕。

var arr=[8,94,15,88,55,76,21,39];
function selectSort(arr){
    var minIndex,temp;
    for(i = 0; i < arr.length-1; i++){
        minIndex=i; //设置最小数的下标为当前的i
        for(j = i+1; j < arr.length; j++){
            if(arr[j] < arr[minIndex]){
                minIndex = j;
            }
        }
    temp = arr[i];
    arr[i] = arr[minIndex];
    arr[minIndex] = temp;
    }
    return arr;
}
console.log(selectSort(arr));

解析
minIndex始终保存着最小值的位置的索引,随着i的自增,遍历的数组长度越来越短,直到完成排序。

JS快速排序(了解思想和了解代码)

原理
从数组中选定一个基数,然后把数组中的每一项与此基数做比较,小的放入一个新数组,大的放入另外一个新数组。然后再采用这样的方法操作新数组。直到所有子集只剩下一个元素,排序完成。

var arr=[8,94,15,88,55,76,21,39];
  function fastsort(arr){
    if(arr.length<2){
        return arr;
    }
    var left=[];
    var right=[];
    var pivotIndex=Math.floor(arr.length/2);
    var pivot=arr.splice(pivotIndex,1)[0];
    for(i=0;i<arr.length;i++){
        if(arr[i]<pivot){
            left.push(arr[i]);
        }else{
            right.push(arr[i])
        }
    }
    return fastsort(left).concat([pivot],fastsort(right));
  }
  console.log(fastsort(arr));

解析
pivotIndex是将数组的长度除2向下取整得到的一个数值,数组的长度是不断减半的,所以最后它的值为0
pivot是利用splice方法从数组里获取一个基数


文章作者: NekoDeng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 NekoDeng !
评 论
 上一篇
JS-ES5
JS-ES5
ES5严格模式(strict mode)顾名思义,这种模式使得Javascript在更严格的条件下运行。-消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;-消除代码运行的一些不安全之处,保证代码运行的安全;-提高编译
2020-07-26
下一篇 
JS事件流
JS事件流
事件冒泡Netscape认为,石头先扔进河里,再从河里确定了一个扔石头的点,从外往内逐渐精确的过程(捕获) w3c认为,石头扔进去先到达准确的那个点,涟漪从内往外扩散(冒泡) 事件流:事件执行的顺序 子元素的事件被触发时,父级也会被触发(冒
2020-07-20
  目录