专栏首页互联网杂技常用算法比较,js实现

常用算法比较,js实现

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 <title></title>
 <style>
 body{
 width: 100%;
 background: gainsboro;
 height: auto;
 word-break: break-all;
 }
 </style>
 </head>
 <body  >
 <div id="arr_pro">
 </div>
 </body>
</html>
<script>
//从小到大
//--------------------------
 function bubble_sort1(arr){
 for(var i=0;i<arr.length;i++){
 for(var j=0;j<arr.length;j++){
 if(arr[j]>=arr[i]){
   var temp=arr[j];
   arr[j]=arr[i];
   arr[i]=temp;
   }
 }
 }
 return arr;
 }
 //=============================
 function bubble_sort2(arr){
 for(var i=0;i<arr.length;i++){
 for(var j=i;j<arr.length;j++){
 if(arr[j]<=arr[i]){
   var temp=arr[j];
   arr[j]=arr[i];
   arr[i]=temp;
   }
 }
 }
 return arr;
 }
 //==============================
 function merge(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());
        }
    }
    //console.log(result);
    return result.concat(left).concat(right);//最后把排好的数组连接起来
}
function merge_sort(items){
    if(items.length == 1){//当数组无法再细分,就结束
        return items;
 }
 var middle = Math.floor(items.length/2),
     left = items.slice(0, middle),//从中间切开,得到左边的数组
     right = items.slice(middle);//得到右边的数组
     return merge(merge_sort(left), merge_sort(right));//递归的细分,直到细分为1
}
//================================
function select_sort(arr){
 var new_arr=[];
 for(var m=0;m<arr.length;m++){
 var temp=null;
 var min=arr[m];//假设这个最小
 for(var i=m;i<arr.length;i++){
 if(arr[i]<min){//如果有比这个假想最小的数,还小,就交换一下
  temp=min;
  min=arr[i];
  arr[i]=temp;
 }
 }
 //console.log(min);//循环结束,得到最小的数
 new_arr.push(min);//把这个最小的数放在新的数组中
 //又去拿最小的数
 }
 return new_arr;
}
//==============================
function quickSort(arr){
        var low=0, high=arr.length-1;
        sort(low,high);
        function sort(low, high){
            if(low<high){
                var mid = (function(low, high){
                    var tmp = arr[low];
                    while(low<high){
                        while(low<high&&arr[high]>=tmp){
                            high--;
                        }
                        arr[low] = arr[high];
                        while(low<high&&arr[low]<=tmp){
                            low++;
                        }
                        arr[high] = arr[low];
                    }
                    arr[low] = tmp;
                    return low;
                })(low, high);
                sort(low, mid-1);
                sort(mid+1,high);
            }
        }
        return arr;
    }
//==============================
function xier_sort(arr){
 //先要确定一个增量,其实确定这个增量还是有技巧的,可以增加排序效率,下面并没有用什么技巧,只是普通的取法,
     for(var group = parseInt(arr.length/2);group>0;group=parseInt(group/2)){//每循环一次,需要减小增量,要保持增量为整数
 for (var i = group; i < arr.length; i++){//然后就以这个增量去排序
                for (var j = i - group; j >= 0; j -= group){
                    if (arr[j] > arr[j + group]){//发现小的,就往前面交换,这个两个相互交换的数,相距增量这么远。要知道这个增量每次循环都在减小,最后就变成相邻了
                        var temp = arr[j];
                        arr[j] = arr[j + group];
                        arr[j + group] = temp;
                    }
                }
            }
 }
     return arr;
 }
//========================================
function insert_sort(arr){
 for(var i=1;i<arr.length;i++){//第0个不用管,从第一个开始插入排序
 if(arr[i]<=arr[i-1]){//如果后一个小:则要移动到前面去
 var j=i-1;
 var x=arr[i];//把小的的保存一下,还要与前面已经排好数的进行比,如果大,还要前移
 arr[i]=arr[i-1];//把大的往后移
 while(x<=arr[j]){//如果已经排好的数组最后一位,大于保存的那个小的,就要后移
 arr[j+1]=arr[j];//上面保存的,只要他还大,就前移
 j--;
 }
 arr[j+1]=x;//把这个大的数给这个前面排好的部分最后一位
 }
 };
 return arr;
 }
//=============================/
 function create_arr(length_arr){
 var arr=[];
 for(var i=0;i<length_arr;i++){
 arr.push(parseInt(Math.random()*length_arr));
 };
 return arr;
 }
 var new_arr=create_arr(5000000);
 var time1=new Date().getTime();
 //冒泡排序
 //arr_pro.innerHTML=bubble_sort2(new_arr);
 //选择排序
 //arr_pro.innerHTML=select_sort(new_arr);
 //希尔排序
 //arr_pro.innerHTML=xier_sort(new_arr);
 //插入排序
 //arr_pro.innerHTML=insert_sort(new_arr);
 //归并排序
 //arr_pro.innerHTML=merge_sort(new_arr);
 //快速排序
 arr_pro.innerHTML=quickSort(new_arr);
 var time2=new Date().getTime();
 var run_time=(time2-time1)/1000;
 console.log(run_time);
</script>

本文分享自微信公众号 - 交互设计前端开发与后端程序设计(interaction_Designer)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-12-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【JS高程】第3章 3.4.5(3)NaN(节选)

    NaN,它的全称是 Not a Number,即非数值。用来表示“一个本来要返回数值的操作数,却未返回数值时的情况”。这样就不会报错了嘛。 在ECMAScrip...

    web前端教室
  • JS延时判断,改善中国博客联盟展示导航自动点击的灵敏度

    说到 JS 延时点击,度娘给出的结果几乎都是 js 的延迟点击 Demo,即鼠标产生一个 mousehover 事件之后,延迟多少秒执行点击动作。 本文主要分享...

    张戈
  • js获取url中?后的参数,修复移动版无法切换到电脑版的BUG

    昨天,发布了《完美实现移动主题在 360 网站卫士缓存全开情况下的切换》一文,通过 JS 实现了主题在移动端访问时的自动切换,最后提到了可以在电脑版和移动版的 ...

    张戈
  • 原创插件:中国博客联盟成员展示导航WordPress插件版

    虽说中国博客联盟成员展示导航 js 版的部署方法已经是简单的不能再简单了,但还是经常有博友 Q 我或在 QQ 群请教如何部署这个页面。 为了让所有人都能傻瓜式的...

    张戈
  • JavaScript基础知识(1)

    表单的确认 :       客户端确认         --减少服务器负载         --缩短用户等待时间         --兼容性难       服务...

    Gxjun
  • 【JS游戏编程基础】关于js里的this关键字的理解

    this关键字在c++,java中都提供了这个关键字,在刚开始学习时觉得有难度,但是只要理解了,用起来就方便多了,下面通过本篇文章给大家详解js里this关键字...

    李海彬
  • 另类SEO分享:利用JS封装iframe躲过搜索引擎的抓取

    前言:很多博友不仔细看完内容就直接认为用 iframe 不好之类的云云,而实际上本文就是教你在必须使用 iframe 的时候,该如何躲过搜索引擎的抓取,避免不利...

    张戈
  • 网站集成打字震动特效JS代码改进版

    这又是一个拖欠了很久的分享,很早就有朋友留言问评论打字炫彩、震动特效怎么实现的。这功能其实网上早就有人分享 N 遍了,有点搜索技巧和 DIY 能力的站长同学也早...

    张戈
  • 【Golang语言社区--H5编程】smoke.js

    大家好,我是社区主编彬哥,今天给大家带来的H5游戏编程中,烟雾特效的js库; 源码如下 var smokemachine = function (c...

    李海彬
  • 使用Go开发一个简单的服务器程序

    最近有个小项目,需要一个简单的后台程序来支撑,本来想用Nodejs来做,但是由于本人js一直很菜,并且很讨厌callback,虽然我也很喜欢异步模型,但我一直都...

    李海彬

扫码关注云+社区

领取腾讯云代金券