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与框架页的操作代码
Jan 17 Javascript
jQuery中读取json文件示例代码
May 10 Javascript
子页向父页传值示例
Nov 27 Javascript
JS中如何设置readOnly的值
Dec 25 Javascript
node.js中的querystring.stringify方法使用说明
Dec 10 Javascript
JS传参及动态修改页面布局
Apr 13 Javascript
Angular2下使用pdf插件的方法详解
Apr 29 Javascript
详解Angular 4.x NgIf 的用法
May 22 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
Jul 20 jQuery
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
Sep 06 Javascript
详解Angular6学习笔记之主从组件
Sep 05 Javascript
高效jQuery选择器的5个技巧实例分析
Nov 26 jQuery
当某个文本框成为焦点时即清除文本框内容
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中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
PHP SPL标准库之接口(Interface)详解
2015/05/11 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
微信小程序 教程之条件渲染
2016/10/18 Javascript
js实现一键复制功能
2017/03/16 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
2017/07/04 Javascript
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
如何在 JavaScript 中更好地利用数组
2018/09/27 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
python对html代码进行escape编码的方法
2015/05/04 Python
Python functools模块学习总结
2015/05/09 Python
将Python代码打包为jar软件的简单方法
2015/08/04 Python
python 检查是否为中文字符串的方法
2018/12/28 Python
Django ModelForm组件使用方法详解
2019/07/23 Python
Djang的model创建的字段和参数详解
2019/07/27 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
Python如何输出整数
2020/06/07 Python
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
美国药妆网站:EDCskincare.com(防晒、痤疮、抗衰老等)
2017/04/28 全球购物
恶意软件的定义
2014/11/12 面试题
四年级语文教学反思
2014/02/05 职场文书
阿甘正传观后感
2015/06/01 职场文书
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers