资讯专栏INFORMATION COLUMN

javascript 算法整理

xbynet / 2106人阅读

摘要:快速排序快速排序原始数组二分查找冒泡排序冒泡排序耗时冒泡排序耗时改进后的冒泡排序耗时改进后的冒泡排序耗时排序前冒泡排序后改进的冒泡排序后选择排序选择排序耗时选择排序耗时排序前排序后插入排序插入排序耗时插入排序耗时排序前排序后

快速排序
function quickSort(ary, isDesc) {
    var len = ary.length;
    if (len < 3) {
        return ary;
    }
    var baseIndex = Math.floor(len / 2),
        base = ary[baseIndex];
    var smallAry = [],
        largeAry = [];
    for (var i = len - 1, cur; i > -1; i--) {
        cur = ary[i];
        if (i == baseIndex) {
            continue;
        }
        if (isDesc) {
            cur < base ? (largeAry[largeAry.length] = cur) : (smallAry[smallAry.length] = cur);
        } else {
            cur >= base ? (largeAry[largeAry.length] = cur) : (smallAry[smallAry.length] = cur);
        }
    }
    smallAry[smallAry.length] = base;
    return quickSort(smallAry, isDesc).concat(quickSort(largeAry, isDesc));
}

function halfSearch(ary, num) {
    var len = ary.length,
        middle = Math.floor(len / 2),
        midNum = ary[middle];
    if (len == 0) {
        return null;
    } else if (num === midNum) {
        return midNum;
    } else if (midNum > num ) {
        return halfSearch(ary.slice(0, middle), num);
    } else {
        return halfSearch(ary.slice(middle + 1), num);
    }
}

var testAry = [9, 2, 3, 4, 1, 0, 8, 4, 2];
var sortedAry = quickSort(testAry);
console.log(sortedAry, "快速排序");
console.log(testAry, "原始数组");
console.log(halfSearch(sortedAry, 3), "二分查找");
冒泡排序
var common = require("./common");

function bubbleSort(ary){
    console.time("冒泡排序耗时");
    var len = ary.length;
    for(var i = 0; i < len; i++){
        for(var j = 0; j < len-1-i; j++){
            if(ary[j] > ary[j+1]){
                var tmp = ary[j];
                ary[j] = ary[j+1];
                ary[j+1] = tmp;
            }
        }
    }
    console.timeEnd("冒泡排序耗时");
    return ary;
}

function bubbleSort2(ary){
    console.time("改进后的冒泡排序耗时");
    var i = ary.length -1;
    while(i > 0){
        var pos;
        for(var j = 0; j < i; j++){
            if(ary[j] > ary[j+1]){
                pos = j;
                var tmp = ary[j];
                ary[j] = ary[j+1];
                ary[j+1] = tmp;
            }
            i = pos;
        }
    }
    console.timeEnd("改进后的冒泡排序耗时");
    return ary;
}

var ary = common.createAry(200);
console.log("排序前", ary.toString());
var result = bubbleSort(ary);
console.log(result.toString(), "冒泡排序后");
console.log(tmp.toString());
result = bubbleSort2(tmp);
console.log(result.toString(), "改进的冒泡排序后");
选择排序
var common = require("./common");
function chooseSort(ary){
    console.time("选择排序耗时");
    var len = ary.length,
        tmp, minIndex;
    for(var i = 0; i < len; i++){
        minIndex = i;
        for(j = i+1; j < len - i; j++){
            if(ary[j] < ary[minIndex]){
                minIndex = j;
            }
        }
        tmp = ary[i];
        ary[i] = ary[minIndex];
        ary[minIndex] = tmp;
    }
    console.timeEnd("选择排序耗时");
    return ary;
}

var ary = common.createAry(20);
console.log("排序前", ary);
var sortedAry = chooseSort(ary);
console.log("排序后", sortedAry);
插入排序
var common = require("./common");
function insertSort(ary) {
    console.time("插入排序耗时");
    var len = ary.length;
    for (var i = 1; i < len; i++) {
        var key = ary[i],
            j = i - 1;
        while (j >= 0 && key < ary[j]) {
            ary[j + 1] = ary[j];
            j--;
        }
        ary[j + 1] = key;
    }
    console.timeEnd("插入排序耗时");
    return ary;
}

var ary = common.createAry(20);
console.log("排序前", ary);
var sortedAry = insertSort(ary);
console.log("排序后", sortedAry);
common.js
exports.createAry =  function(number){
    var ary = [];
    for(let i = 0; i < number; i++){
        ary.push(Math.floor(Math.random()*100));
    }
    return ary;
}

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

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

相关文章

  • Javascript之常见算法整理(持续更新)

    摘要:所以平均来说,插入排序的时间复杂度是。显然,次方级别的时间复杂度代表着插入排序不适合数据特别多的情况,一般来说插入排序适合小数据量的排序。 更新了几个知识点~欢迎一起交流呀~ 一、排序 冒泡排序(复杂度O(n^2)) //冒泡排序 function bubbleSort(arr) { for(var i = 0, len = arr.length; i < len - 1; +...

    cc17 评论0 收藏0
  • 数据结构与算法资源整理

    摘要:汇总数据结构算法篇算法与数据结构我接触过的前端数据结构与算法十大经典排序算法总结描述 showImg(https://segmentfault.com/img/bVbn0N2?w=458&h=275); 2018汇总数据结构算法篇JavaScript 算法与数据结构我接触过的前端数据结构与算法十大经典排序算法总结(JavaScript描述)

    neu 评论0 收藏0
  • 详细解说JavaScript内存管理和GC算法

      JavaScript在创建变量(数组、字符串、对象等)是自动进行了分配内存,而且当它没有被使用的状态下,会自动的释放分配的内容;其实这样基层语言,如C语言,他们提供了内存管理的接口,比如malloc()用于分配所需的内存空间、free()释放之前所分配的内存空间。  释放内存的过程称为垃圾回收,例如avaScript这类高级语言可以提供了内存自动分配和自动回收,其实这个自动储存不会占用太多空间...

    3403771864 评论0 收藏0
  • 浅谈V8引擎中的垃圾回收机制

    摘要:新生代的对象为存活时间较短的对象,老生代中的对象为存活时间较长或常驻内存的对象。分别对新生代和老生代使用不同的垃圾回收算法来提升垃圾回收的效率。如果指向老生代我们就不必考虑它了。 这篇文章的所有内容均来自 朴灵的《深入浅出Node.js》及A tour of V8:Garbage Collection,后者还有中文翻译版V8 之旅: 垃圾回收器,我在这里只是做了个记录和结合 垃圾回收...

    happen 评论0 收藏0

发表评论

0条评论

xbynet

|高级讲师

TA的文章

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