Javascript排序算法

接触前端已经有一段时间了,可能好多程序猿都会觉得前端开发碰不到数据结构,算法的知识,在日常工作中可能永远都不会需要去了解的很深,没什么用,自我感觉对基础算法的了解能使我们在工作中运用这些基本的思想,写出更优的代码,更易于维护的代码。

常用的排序算法

在算法中排序的算法很多种,本文我主要介绍javascript中常见的三种算法:快速排序法、冒泡法、选择排序法。

快速排序法

简述步骤:

1.从数列中挑出一个元素,称为 ”基准”;
2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区操作;
3.递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。

上代码:

 function quicklySort(arr){
    if (arr.length<2) {
        return arr;
    }
    var pivotIndex=Math.floor(arr.length/2);  //下舍入取数组的中间位置
    var pivot=arr.splice(pivotIndex,1)[0];    //实现数组的定位删除
    var left=[];
    var right=[];
    for(var i=0;i<arr.length;i++){
        if (arr[i]<pivot) {
            left.push(arr[i]);
        }else {
            right.push(arr[i])
        }
    }
    return quicklySort(left).concat([pivot], quicklySort(right))
}

冒泡法

简述步骤:

1、从数组的第一个开始两两比较,如果前面的元素大于后面的元素,两个元素交换。

2、忽略最后一个元素,重复第一步。

上代码:

 function bubbleSort(arr) {
if (arr.length<2) {
    return arr;
}
for(var i=0;i<arr.length;i++){
    for(var j=0;j<arr.length-1;j++){
        if (arr[j]>arr[j+1]) {
            var temp;
            temp=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=temp;
        }
    }
}
return arr;
}

选择排序法

简述步骤:
1、遍历整个数组,假设第一个元素为整个元素最小值,用这个元素跟数组其他元素进行比较,如果遇到了更小的元素,将更小的元素设为最小的元素,并将两个元素的位置进行交换,这样在遍历数组之后最小的元素就被移动到了第一位。

2、把剩余的数组重复第一步操作,直到最后只剩下一个元素那么前面的元素一定都是有序的而且都是不大于最后一个的,这样就得到一个有序的数组。

上代码:

function selectionSort(arr) {
    if (arr.length<2) {
        return arr;
    }
    for(var i=0;i<arr.length;i++){
        for(var j=i+1;j<arr.length;j++){
            if(arr[i]>arr[j]){
                var temp;
                temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
    }
    return arr;
}