前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常用算法比较,js实现

常用算法比较,js实现

作者头像
前朝楚水
发布2018-04-02 15:28:16
2.3K0
发布2018-04-02 15:28:16
举报
文章被收录于专栏:互联网杂技互联网杂技
<!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>
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 交互设计前端开发与后端程序设计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档