晴明的博客园 GitHub      CodePen      CodeWars     

[js] 几种检索算法

#

            function findMin(arr) {
                var min = arr[0];
                for (var i = 1; i < arr.length; ++i) {
                    if (arr[i] < min) {
                        min = arr[i];
                    }
                }
                return min;
            }

            function findMax(arr) {
                var max = arr[0];
                for (var i = 1; i < arr.length; ++i) {
                    if (arr[i] > max) {
                        max = arr[i];
                    }
                }
                return max;
            }
            //顺序查找实现indexOf。比Array.indexOf()慢
            function seqSearch(arr, data) {
                for (var i = 0; i < arr.length; ++i) {
                    if (arr[i] == data) {
                        return i;
                    }
                }
                return -1;
            }
            //自组织数据
            function seqSearch(arr, data) {
                var temp;
                for (var i = 0; i < arr.length; ++i) {
                    if (arr[i] == data) {
                        if (i > 0) {
                            temp = arr[i];
                            arr[i] = arr[i - 1];
                            arr[i - 1] = temp;
                        }
                        return true;
                    }
                }
                return false;
            }
            //80-20原则,优化的自组织数据
            function seqSearch(arr, data) {
                var temp;
                for (var i = 0; i < arr.length; ++i) {
                    if (arr[i] == data && i > (arr.length * 0.2)) {
                        temp = arr[i];
                        arr[i] = arr[0];
                        arr[0] = temp;
                        return true;
                    } else if (arr[i] == data) {
                        return true;
                    }
                }
                return false;
            }
            //二分法查找有序数组
            function binSearch(arr, data) {
                var upperBound = arr.length - 1;
                var lowerBound = 0;
                while (lowerBound <= upperBound) {
                    var mid = Math.floor((upperBound + lowerBound) / 2);
                    if (arr[mid] < data) {
                        lowerBound = mid + 1;
                    } else if (arr[mid] > data) {
                        upperBound = mid - 1;
                    } else {
                        return mid;
                    }
                }
                return -1;
            }
            //统计查找出的数据的个数
            function count(arr, data) {
                var count = 0;
                var position = binSearch(arr, data);
                if (position > -1) {
                    ++count;
                    for (var i = position - 1; i > 0; --i) {
                        if (arr[i] == data) {
                            ++count;
                        } else {
                            break;
                        }
                    }
                    for (var i = position + 1; i < arr.length; ++i) {
                        if (arr[i] == data) {
                            ++count;
                        } else {
                            break;
                        }
                    }
                }
                return count;
            }

 

posted @ 2016-03-21 14:27  晴明桑  阅读(312)  评论(0编辑  收藏  举报