JavaScript-实现排序算法

1.简单选择排序

基本思想:先选第一个数,分别与后面n-1个数比较,保留数组中最小值在位置上,大值则交换;再选第二个数,分别与后面n-2个数比较,如此循环
时间复杂度:O(n^2)
。。。
function selectSort(arr){
            var temp;
            for(var i = 0; i < arr.length - 1; i++){
                for(var j = i + 1; j < arr.length; j++){
                    if(arr[i] > arr[j]){
                        temp = arr[j];
                        arr[j] = arr[i];
                        arr[i] = temp;
                    }
                }
            }
            return arr;
}
2.冒泡排序(默认小数上冒 )
基本思想:(小数往上冒)最后一个数不断与前一个数比较,若较小就往上冒,循环一次会把最小数带到最高处
时间复杂度:O(n^2)
function bubbleSort (arr) {
            for(var i = 0; i < arr.length; i++){
                for(var j = arr.length; j > i; j--){
                    if(arr[j] < arr[j - 1]){
                        [arr[j], arr[j - 1]] = [arr[j -1], arr[j]];
                    }
                }
            }
            return arr;
}
 改进冒泡排序
基本思想:记录最后一个交换的地方,不交换的地方说明已经排好序了,所以下一次排序只需要排[pos,arr.length-1]这一段,而非[i,arr.length-1]
function bubbleSort_(arr){
            var pos = 0;
            while(pos != arr.length - 2){
                var count = pos;
                for(var j = arr.length - 1; j > count; j--){
                    if(arr[j] < arr[j - 1]){
                        [arr[j], arr[j - 1]] = [arr[j - 1], arr[j]];
                        pos = j
                    }
                }
            }
            return arr;
        }
3.插入排序
基本思想:从第二个数开始,不断插入到前面的有序数组中去(代码实现时,不断把大数往后移,基数找到位置后插入)
function insertion (arr) {
            for(var i = 1; i < arr.length; i++){
                var num = arr[i];
                var j = i;
                while(num < arr[j - 1] && j >= 1){
                    arr[j] = arr[j - 1];
                    j--;
                }
                arr[j] = num;
            }
            return arr;
}
4.快速排序
基本思想:以第一个数为基数,小数放左边,大数放右边,左右数组递归
        function quick (arr) {
            if(arr.length <= 1){
                return arr;
            }else{
                var left = [];
                var right = [];
                var num = arr[0];
                for(var i = 1; i < arr.length; i++){
                    if(num > arr[i]){
                        left.push(arr[i]);
                    }else {
                        right.push(arr[i]);
                    }
                }
                return quick(left).concat(num, quick(right));
            }
        }

 

 

posted @ 2017-07-27 22:42  小儿比春花  阅读(140)  评论(0编辑  收藏  举报