zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    SecureCRT
    NFS服务器搭建
    卸载oracle步骤
    redhat 5.5 x86_x64搭建samba服务器
    ORA-01940: cannot drop a user that is currently connected
    迁移表空间
    日常SQL使用总结
    DataGuard常规操作命令
    使用PowerDesginer画ER图
    数据库卸载
  • 原文地址:https://www.cnblogs.com/onlycare/p/9810459.html
Copyright © 2011-2022 走看看