JS排序

作者: 前端开发工程师老唐 | 来源:发表于2019-01-02 15:30 被阅读0次

    排序除了面试会考,好像实际项目中也用的不多,但是用来了解算法,开拓思维也是很nice的,站在巨人肩膀上学习了几种比较好理解的:

    • 选择排序:
      思想很简洁,也是最符合常规思维的一种方法,每次以既定的第一个为基准,遍历后面的每一个元素,比基准小则交换位置
                function selectionSort(arr) {
                    if(arr instanceof Array){ //校验参数类型
                        var len = arr.length;
                        var count = 0; //计数,非必须
                        for (var i = 0; i < len - 1; i++) {
                            for (var j = i + 1; j < len - 1; j++) {
                                let tmp;
                                count++;
                                if (arr[i] > arr[j]) { //交换值
                                    tmp = arr[i];
                                    arr[i] = arr[j];
                                    arr[j] = tmp;
                                }
                            }
                        }
                        console.log(`count = ${count}`);
                        return arr;
                    }
                }
    
    • 冒泡排序:
      每次从头开始,比较相邻两个元素的值大小,如果前者大于后者,则交换二者的位置,就向气泡一样,最大(或者最小)的会往尾部靠
                function sort(arr,  type = "up") { //type为升序或者降序
                    if (!(arr instanceof Array)) { //校验数据类型
                        return;
                    } else {
                        let count = 0;
                        for (let i = 0; i < arr.length - 1; i++) { //精简循环次数
                            for (let j = 0; j < arr.length - 1 - i; j++) { //每次循环会确实一个值,不用循环已经确定的值
                                let tmp;
                                if (
                                    type == "up"
                                        ? arr[j] > arr[j + 1]
                                        : arr[j] < arr[j + 1]
                                ) {
                                    // if(arr[j] > arr[j+1]){
                                    tmp = arr[j];
                                    arr[j] = arr[j + 1];
                                    arr[j + 1] = tmp;
                                }
                                count++;
                            }
                        }
                        console.log(`count = ${count}`);
                        return arr;
                    }
                }
    
    • 快速排序法,二分法:
      1.选择数组中间的值为基准值。
      2.比基准小的推入一个数组,比基准大推入一个数组。并拼接
      3.递归执行1,2两个步骤去分别筛选新数组,直到数组长度为0或者1,终止循环。
        function quickSort(arr){
            if(arr.length <=1){
                return arr
            }
            var midIndex = Math.floor(arr.length/2); //取数组中间值
            var midValue = arr.splice(midIndex, 1)[0];
            var left = [],right=[]; //新建两个分类数组
            for (let index = 0; index < arr.length; index++) {
                const element = arr[index]
                element > midValue? right.push(element) : left.push(element) //把数组分为两类
            }
            return quickSort(left).concat([midValue], quickSort(right)) //递归调用
        }
    

    递归的思想,耐人寻味。

    相关文章

      网友评论

          本文标题:JS排序

          本文链接:https://www.haomeiwen.com/subject/sdpzlqtx.html