Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)


Posted in Javascript onApril 29, 2014
l = [6, 2, 4, 1, 98, 34, 5, 9, 23, 8, 10, 32]       
//冒泡排序
/*function bubbleSort(arr) {
    newarr = arr.slice()
    if (newarr.length <= 2) return newarr
    for (var i = 0; i < newarr.length - 1; i++) {
        for (var j = 0; j < newarr.length - i - 1; j++) {
            if (newarr[j] > newarr[j + 1]) {
                newarr[j] = [newarr[j + 1], newarr[j + 1] = newarr[j]][0]
            }
        }
    }
    return newarr
}
console.log(l)
result = bubbleSort(l)
console.log(result)*/
       
//快速排序
/*function quickSort(arr) {
    if (arr.length <= 1) return arr;
    var left = [],
        right = [],
        middle = [];
    var mid = arr[Math.floor(arr.length / 2)]
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] < mid) {
            left.push(arr[i]);
        } else if (arr[i] > mid) {
            right.push(arr[i]);
        } else {
            middle.push(mid);
        }
    }
    return [].concat(quickSort(left), middle, quickSort(right))
}
var results = quickSort(l)
console.log(results)
       
*/
//选择排序
/*function selectSort(arr) {
    var min = 9999,
        minindex = 0;
    var left = [],
        right = arr.slice();
    if (arr.length <= 1) return arr;
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] <= min) {
            min = arr[i];
            minindex = i;
        }
    }
    left.push(min);    
    right.splice(minindex, 1);
    return [].concat(left, selectSort(right))
}
       
var results = selectSort(l)
console.log(results)*/
       
//插入排序
/*function insertSort(arr) {
    var tmp;
    for (var i = 1; i < arr.length; i++) {
        tmp = arr[i];
        for (var j = i; j > 0; j--) {
            if (arr[j - 1] > tmp) {
                arr[j] = arr[j - 1];
            } else {
                break;
            }
        }
        arr[j] = tmp;
    }
    return arr;
}
var results = insertSort(l)
console.log(results)*/
//木桶排序
/*function bucketSort(arr){
    var bucket = [];
    var newarr = [];
    for (var i = 0; i < arr.length; i++) {
        bucket[arr[i]] = arr[i];
    }
    for (var i = 0; i < bucket.length; i++) {
        if (bucket[i] !== undefined){
            newarr.push(bucket[i])
        }
    }
    return newarr;
}
var results = bucketSort(l)
console.log(results)*/
//鸽巢排序,非负整数
/*function pigeonholeSort(arr){
    var tempArr = [];
    for(var i=0,l=arr.length;i<l;i++){
        tempArr[arr[i]] = (tempArr[arr[i]]+1)||1 ;
    }
    var result = [],count;
    for(var k=0;k<tempArr.length;k++){
        count = tempArr[k];
        if(count){
            for(var i=0;i<count;i++){
                result.push(k);
            }
        }      
    }
    return result;    
}
var results = pigeonholeSort(l)
console.log(results)*/
//归并排序
/*function mergeSort(arr) {
    if (arr.length <= 1) return arr;
    var mid = Math.floor(arr.length / 2);
    var left = MergeSort(arr.slice(0, mid));
    var right = MergeSort(arr.slice(mid));
    var result = [];
    while (left.length && right.length) {
        if (left[left.length - 1] <= right[0]) {
            result = result.concat(left);
            left = [];
        } else if (right[right.length - 1] < left[0]) {
            result = result.concat(right);
            right = [];
        } else {
            if (right[0] < left[0]) {
                result.push(right.shift());
            } else {
                result.push(left.shift());
            }
        }
    }
    result = result.concat(left, right);
    return result;
}*/
       
/*function mergeSort(arr) {
    var merge = function(left, right) {
        var result = [];
        while (left.length > 0 && right.length > 0) {
            if (left[0] < right[0]) {
                result.push(left.shift());
            } else {
                result.push(right.shift());
            }
        }
        return result.concat(left).concat(right);
    }
    if (arr.length == 1) return arr;
    var middle = Math.floor(arr.length / 2),
        left = arr.slice(0, middle),
        right = arr.slice(middle);
    return merge(mergeSort(left), mergeSort(right));
}
var results = mergeSort(l)
console.log(results)
*/
       
//堆排序
/*function heapSort(arr) {
    var findRoot = function(arr, p, length) {
        p = p || 0;
        length = length || arr.length;
        var self = arguments.callee;
        var l = p * 2 + 1;
        var r = (p + 1) * 2;
        var left, right;
        if (l < length) left = self(arr, l, length);
        if (r < length) right = self(arr, r, length);
        if (left > arr[p]) arr[p] = [left, arr[l] = arr[p]][0];
        if (right > arr[p]) arr[p] = [right, arr[r] = arr[p]][0];
        return arr[p];
    };
       
    for (var i = arr.length; i > 0; i--) {
        findRoot(arr, 0, i);
        arr[i - 1] = [arr[0], arr[0] = arr[i - 1]][0];
    }
    return arr;
}
var results = heapSort(l)
console.log(results)*/
       
//奇偶排列
/*function oddEvenSort(arr) {
    var swaped = true,
        k = 0;
    while (swaped) {
        if (k > 0) swaped = false;
        for (var i = k; i < arr.length - 1; i += 2) {
            if (arr[i]>arr[i+1]) {
                arr[i] = [ arr[i+1], arr[i+1]=arr[i] ][0];
                swaped = true;
            }
        }
        k = [1, 0][k]
    }
    return arr;
}
var results = oddEvenSort(l)
console.log(results)*/
function oddEvenSort(arr) {
    var swaped = true;
    while (swaped) {
        swaped = false;
        for (var i = 0; i < arr.length; i += 2) {
            if (arr[i] > arr[i + 1]) {
                arr[i] = [arr[i + 1], arr[i + 1] = arr[i]][0];
                swaped = true;
            }
        }
        for (var i = 1; i < arr.length; i += 2) {
            if (arr[i] > arr[i + 1]) {
                arr[i] = [arr[i + 1], arr[i + 1] = arr[i]][0];
                swaped = true;
            }
        }
    }
    return arr;
}
var results = oddEvenSort(l)
console.log(results)
Javascript 相关文章推荐
JS 巧妙获取剪贴板数据 Excel数据的粘贴
Jul 09 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
Dec 30 Javascript
js+jquery实现图片裁剪功能
Jan 02 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
javascript委托(Delegate)blur和focus用法实例分析
May 26 Javascript
js学习阶段总结(必看篇)
Jun 16 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
Oct 27 Javascript
JavaScript实现小球沿正弦曲线运动
Sep 07 Javascript
JavaScript之解构赋值的理解
Jan 30 Javascript
JavaScript原型继承和原型链原理详解
Feb 04 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
Apr 10 Javascript
javaScript Array api梳理
Mar 31 Javascript
当某个文本框成为焦点时即清除文本框内容
Apr 28 #Javascript
JS实现两个大数(整数)相乘
Apr 28 #Javascript
关于img的href和src取变量及赋值的方法
Apr 28 #Javascript
php和js对数据库图片进行等比缩放示例
Apr 28 #Javascript
JS计算网页停留时间代码
Apr 28 #Javascript
js分页代码分享
Apr 28 #Javascript
jquery使用ajax实现微信自动回复插件
Apr 28 #Javascript
You might like
PHP 数组实例说明
2008/08/18 PHP
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
再Docker中架设完整的WordPress站点全攻略
2015/07/29 PHP
div层的移动及性能优化
2010/11/16 Javascript
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
微信小程序 教程之wxapp视图容器 swiper
2016/10/19 Javascript
JS中作用域和变量提升(hoisting)的深入理解
2016/10/31 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
2017/01/04 Javascript
vue实现登录后页面跳转到之前页面
2018/01/07 Javascript
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
python解析xml文件操作实例
2014/10/05 Python
给Python初学者的一些编程技巧
2015/04/03 Python
举例讲解Python中的list列表数据结构用法
2016/03/12 Python
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
Python+tkinter使用80行代码实现一个计算器实例
2018/01/16 Python
Django中的ajax请求
2018/10/19 Python
Python实现Restful API的例子
2019/08/31 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
python Dijkstra算法实现最短路径问题的方法
2019/09/19 Python
利用python爬取有道词典的方法
2020/12/08 Python
副董事长岗位职责
2014/04/02 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
运动会报道稿大全
2015/07/23 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python