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 相关文章推荐
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
Feb 14 Javascript
Jquery 表单验证类介绍与实例
Jun 09 Javascript
三种取消选中单选框radio的方法
Sep 09 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
Jun 12 Javascript
JS判断页面是否出现滚动条的方法
Jul 17 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
Jan 23 Javascript
Bootstrap carousel轮转图的使用实例详解
May 17 Javascript
Bootstrap3学习笔记(三)之表格
May 20 Javascript
jquery简单插件制作(fn.extend)完整实例
May 24 Javascript
Bootstrap基本组件学习笔记之导航(10)
Dec 07 Javascript
vue自定义组件实现双向绑定
Jan 13 Vue.js
Vue看了就会的8个小技巧
Jan 21 Vue.js
当某个文本框成为焦点时即清除文本框内容
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
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
一个经典的PHP验证码类分享
2014/11/18 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
Jquery跨浏览器文本复制插件Zero Clipboard的使用方法
2016/02/28 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
JS实现的简单图片切换功能示例【测试可用】
2017/02/14 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
深入理解vue-loader如何使用
2017/06/06 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
layer插件select选中默认值的方法
2018/08/14 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
Python中使用dom模块生成XML文件示例
2015/04/05 Python
Python实现简单拆分PDF文件的方法
2015/07/30 Python
python数据预处理之将类别数据转换为数值的方法
2017/07/05 Python
Python实现的rsa加密算法详解
2018/01/24 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
基于python实现简单日历
2018/07/28 Python
通过实例学习Python Excel操作
2020/01/06 Python
Python用input输入列表的实例代码
2020/02/07 Python
python能做哪些生活有趣的事情
2020/09/09 Python
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
世界上最值得信赖的多日游在线市场:TourRadar
2018/07/20 全球购物
全球高级音频和视频专家:HiDef Lifestyle
2019/08/02 全球购物
综治维稳工作承诺书
2014/08/30 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
迎新年主持词
2015/07/06 职场文书
女儿满月酒致辞
2015/07/29 职场文书