js实现常见排序算法

来源:互联网 发布:慈溪行知职高地址全称 编辑:程序博客网 时间:2024/06/05 02:31

1,冒泡排序。
顾名思义,就是从头开始,每两个相邻元素相互比较,把大的放后面,这样子经过一次循环,最大的数就被冒泡到最后面了。下一次循环也是这样,只是需要循环的长度减一(排除最后一个数字)

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

2,选择排序。就是每次从头到尾寻找一个最小的数字,把他放到最前面,下一次循环也是这样,循环长度减1(去掉最前面的最小数)

function selectSort(arr){    var minIndex,len = arr.length;    for(var i = 0; i < len - 1; i++){        minIndex = i;        for(var j = i + 1; j < len; j++){            if(arr[j] < arr[minIndex]){                minIndex = j;            }        }        var tmp = arr[i];        arr[i] = arr[minIndex];        arr[minIndex] = tmp;    }    return arr;}

3,选择排序。就跟打扑克一样,从左到右,每次把当前的数字跟前面的比较,比他小就插到他前面。在代码中就是先用current表示当前数字,跟他前面的数字比较,比他小就把前面的数字往后放一位,这样,就空出来一个位置。当前面的数字比current小,就把current放到空出来的位置。

function insertSort(arr){    var len = arr.length,        current;    for(var i = 1; i < len; i++){        current = arr[i];        for(var j = i - 1; j >= 0; j--){            if(arr[j] > current){                arr[j+1] = arr[j];            }else{                arr[j+1] = current;                break;            }        }    }    return arr;}

4,快速排序,就是选择一个数字,一般选中间的数midValue,数组中比他小的放进left数组,比他大的放在right数组中。递归调用,若是数组长度小于2,直接返回数组。最后将left和midValue和right拼接起来。

function quickSort(arr){    var len = arr.length;    if(len < 2){        return arr;    }    var midIndex = Math.floor(len/2);       var midValue = arr.splice(midIndex,1);    var left = [],        right = [];    arr.forEach(function(v){        if(v < midValue){            left.push(v);        }else{            right.push(v);        }    });    return quickSort(left).concat(midValue, quickSort(right));}
原创粉丝点击