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获取提交的字符串的字节数
Feb 09 Javascript
13个绚丽的Jquery 界面设计网站推荐
Sep 28 Javascript
jquery 显示*天*时*分*秒实现时间计时器
May 07 Javascript
JavaScript各类型的关系图解
Oct 16 Javascript
理解javascript中的MVC模式
Jan 28 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
Jul 14 Javascript
给easyui datebox扩展一个清空的实例
Nov 09 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
Dec 13 Javascript
servlet+jquery实现文件上传进度条示例代码
Jan 25 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
Jul 28 Javascript
D3.js实现简洁实用的动态仪表盘的示例
Apr 04 Javascript
使用electron制作满屏心特效的示例代码
Nov 27 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实现AES256加密算法实例
2014/09/22 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
微信小程序 rpx 尺寸单位详细介绍
2016/10/13 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
JavaScript中数据类型转换总结
2016/12/25 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
python基础教程项目三之万能的XML
2018/04/02 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
Tom Dixon官网:英国照明及家具设计和制造公司
2019/03/01 全球购物
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
Aurora London官网:奢华、负担得起的皮革手袋
2020/08/01 全球购物
"火柴棍式"程序员面试题
2014/03/16 面试题
大学生农村教师实习自我鉴定
2013/09/21 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书
pandas 实现将NaN转换为None
2021/05/14 Python
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript