• javascript常用数组排序及二分查找


    1. 冒泡排序 基本思路:依次比较相邻的两个数的大小,若大数在前、小数在后,则交换两个数的位置,依次比较直至全部数据从小到大排好序

        function sort_bubble(arr) {
            var len = arr.length;
            for (var i = 0; i < len; i++) {
                for (var j = 0; j < len - (i + 1); j++) {
                    if (arr[j] > arr[j + 1]) {
                        var temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
            return arr;
        }
        var arr = [9,3,5,7,2,8];
        console.log(sort_bubble(arr));    // [2, 3, 5, 7, 8, 9]

    2. 选择排序 基本思路:通过比较首先选出最小的数放在第一个位置上,然后在其余的数中选出次小数放在第二个位置上,以此类推,直到所有的数成为有序数列。

       function sort_select(arr) {
            var len = arr.length, minIndex, temp;
            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;
                    }
                }
                temp = arr[i];
                arr[i] = arr[minIndex];
                arr[minIndex] = temp;
            }
            return arr;
        }
        var arr = [9,3,5,7,2,8];
        console.log(sort_select(arr));   // [2, 3, 5, 7, 8, 9]

    3. 快速排序 基本思路:将序列分成2部分,左边放小数,右边放大数,最后将左边、中间、右边连接起来。

       function sort_quick(arr) {
            if (arr.length <= 1) {
                return arr;
            }
            var mid = Math.floor(arr.length/2),
                midNum = arr[mid],
                left = [],
                right = [],
                midArr = [];
            for (var i = 0; i < arr.length; i ++) {
                if (arr[i] < midNum) {
                    left.push(arr[i]);
                } else if (arr[i] > midNum) {
                    right.push(arr[i]);
                } else {
                    midArr.push(arr[i]);
                }
            }
            return sort_quick(left).concat(midArr,sort_quick(right));
        }
         var arr = [9,3,5,7,2,8];
        console.log(sort_quick(arr));   // [2, 3, 5, 7, 8, 9]

    4. 二分查找(折半查找),在从小到大排列的有序数列中查找指定值的位置 基本思路:找到一个中间值,通过与中间值比较,大的放右边,小的放在左边。再在两边中寻找中间值,持续以上操作,直到找到所在位置为止。

        function find_fold(arr,target) {
            var low = 0,high = arr.length - 1;
            while (low <= high) {
                var mid = Math.floor((low + high) / 2);
                if (arr[mid] === target) {
                    return mid;
                }
                if (target > arr[mid]) {
                    low = mid + 1;
                } else {
                    high = mid -1;
                }
            }
            return false;
        }
    
        var arr = [2,3,4,5,6];
        console.log(find_fold(arr,5));   // 3
  • 相关阅读:
    机器学习-Matplotlib绘图(柱状图,曲线图,点图)
    人工智能-机器学习之numpy方法
    爬虫解码~以及我的一些小经验
    django-子项目
    Django-模板语法
    Django-cookie的保存以及删除操作
    django-路由
    响应式瀑布流
    原生js实现最简单的瀑布流布局
    原生js用div实现简单的轮播图
  • 原文地址:https://www.cnblogs.com/onlycare/p/9810459.html
Copyright © 2020-2023  润新知