资讯专栏INFORMATION COLUMN

排序算法和二分法查找

blastz / 1562人阅读

摘要:请填充代码,使能使传入的参数按照从小到大的顺序显示出来。冒泡排序从小到大排序从大到小排序快速排序插入排序二分查找递归方法二分查找非递归方法

请填充代码,使mySort()能使传入的参数按照从小到大的顺序显示出来。

function mySort() {
    var tags = new Array();
    for (var i = 0; i < arguments.length; i++) {
        tags.push(arguments[i]);
    }
    tags.sort(function sortNum(a, b) {
        return a - b;
    });
    return tags;
}

var result = mySort(50, 11, 16, 32, 24, 99, 57, 100);
console.info(result);

冒泡排序

function bubbleSort(arr) {
    for (var i = 0; i < arr.length; i++) {
        for (var j = 0; j < arr.length - i; j++) {
            var temp = 0;
            // ">" 从小到大排序
            // "<" 从大到小排序
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    return arr;
}

快速排序

 function quickSort(elements) {
    if (elements.length <= 1) {
        return elements;
    }
    var pivotIndex = Math.floor(elements.length / 2);
    var pivot = elements.splice(pivotIndex, 1)[0];
    var left = [];
    var right = [];
    for (var i = 0; i < elements.length; i++) {
        if (elements[i] < pivot) {
            left.push(elements[i]);
        } else {
            right.push(elements[i]);
        }
    }
    return quickSort(left).concat([pivot], quickSort(right));
}

插入排序

insertSort = function (elements) {
    var i = 1,
        j, step, key, len = elements.length;
    for (; i < len; i++) {
        step = j = i;
        key = elements[j];
        while (--j > -1) {
            if (elements[j] > key) {
                elements[j + 1] = elements[j];
            } else {
                break;
            }
        }
        elements[j + 1] = key;
    }
    return elements;
};

二分查找-递归方法

function binarySearch(arr, key, leftIndex, rightIndex) {
    if (leftIndex > rightIndex) {
        return -1;
    }
    var mid = parseInt((leftIndex + rightIndex) / 2);
    if (arr[mid] == key) {
        return mid;
    } else if (arr[mid] > key) {
        rightIndex = mid - 1;
        return binarySearch(arr, key, leftIndex, rightIndex);
    } else if (arr[mid] < key) {
        leftIndex = mid + 1;
        return binarySearch(arr, key, leftIndex, rightIndex);
    }
}

二分查找-非递归方法

function binarySearch(arr, key) {
    var leftIndex = 0,
        rightIndex = arr.length - 1;
    while (leftIndex <= rightIndex) {
        var mid = parseInt((leftIndex + rightIndex) / 2);
        if (arr[mid] == key) {
            return mid;
        } else if (arr[mid] < key) {
            leftIndex = mid + 1;
        } else if (arr[mid] > key) {
            rightIndex = mid - 1;
        } else {
            return -1;
        }
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88227.html

相关文章

  • 数据结构与算法二分查找

    摘要:为检查长度为的列表,二分查找需要执行次操作。最后需要指出的一点是高水平的读者可研究一下二叉树关于二叉树,戳这里数据结构与算法二叉树算法常见练习在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 常见数据结构 简单数据结构(必须理解和掌握) 有序数据结构:栈、队列、链表。有序数据结构省空间(储存空间小) 无序数据结构:集合、字典、散列表,无序...

    zsirfs 评论0 收藏0
  • 数据结构与算法二分查找

    摘要:为检查长度为的列表,二分查找需要执行次操作。最后需要指出的一点是高水平的读者可研究一下二叉树关于二叉树,戳这里数据结构与算法二叉树算法常见练习在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 常见数据结构 简单数据结构(必须理解和掌握) 有序数据结构:栈、队列、链表。有序数据结构省空间(储存空间小) 无序数据结构:集合、字典、散列表,无序...

    you_De 评论0 收藏0
  • 数据结构与算法二分查找

    摘要:为检查长度为的列表,二分查找需要执行次操作。最后需要指出的一点是高水平的读者可研究一下二叉树关于二叉树,戳这里数据结构与算法二叉树算法常见练习在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 常见数据结构 简单数据结构(必须理解和掌握) 有序数据结构:栈、队列、链表。有序数据结构省空间(储存空间小) 无序数据结构:集合、字典、散列表,无序...

    gotham 评论0 收藏0
  • 二分查找】| 模拟 20 万数据快速查询 IP 归属地

    摘要:通过两个二分查找的条件继续进行问题的分析,那么问题又来了,二分查找是快速的查找一个数据是否存在一组数据中,而且效率极高,亿查找一个数据只需次查找。二分查找的三点重点循环退出条件注意是而不是。 showImg(https://segmentfault.com/img/remote/1460000018761246);这篇文章主要深入数据结构与算法在解决实际问题怎么运用和分析的,对于 IP...

    The question 评论0 收藏0
  • 数据结构与算法——二分查找

    摘要:所以,二分查找较适用于一次排序,多次查找的数据。面对大量的数据,二分查找方能体现其优势。 1. 二分查找的思想 二分查找是一种使用十分普遍的查找算法,其基本的思路也非常的简单,在一个有序的数据集合中,我们想要查找某个数据,直接取最中间的那个数据,将它和要找的数据进行比较,如果较大,则在更大的那个数值区间继续取中间值查找,反之亦然。 例如我们要在一个有序的集合里[1,3,5,6,7,8,...

    boredream 评论0 收藏0
  • PHP面试:常见查找算法一篇说透

    摘要:我们现在来看二分搜索算法的两种变形插值搜索和指数搜索。插值搜索是对二分搜索算法的改进,插值搜索可以基于搜索的值选择到达不同的位置。 预警 在本篇文章中,将为各位老铁介绍不同的搜索算法以及它们的复杂度。因为力求通俗易懂,所以篇幅可能较长,大伙可以先Mark下来,每天抽时间看一点理解一点。本文配套的Github Repo,欢迎各位老铁star,会一直更新的。 开篇 和排序类似,搜索或者叫做...

    付永刚 评论0 收藏0

发表评论

0条评论

blastz

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<