JavaScript Switc归并排序

这篇博客介绍了归并排序的原理,它通过将数组不断分割并归并来达到排序的目的。文中提供了一个JavaScript实现的归并排序示例,包括分割、归并和排序1或2个元素的数组的函数。示例代码详细展示了如何递归地应用归并排序,并在控制台打印了中间过程和最终排序结果。
摘要由CSDN通过智能技术生成

算法详解

   归并排序的思想是把一个数组分成两半,排序每一半。然后用merge方法将数组的两半归并成一个有序的数组。被分的每一半使用递归,再次划分排序,直到得到的子数组只含有一个数据项为止。归并排序需要额外的一个和AB两个数组总和相等的空间,如果初始数组几乎沾满了整个存储器,那么归并排序就不能工作了。

代码:

    <script type="text/javascript">
                    var _lok = new Array(9,6,20,4,2,99,44,325);

                    

                    var guibing = function(arr){

                    

                        //分割数组 如果该数组长度大于2  继续分割  否则返回一个排序好的长度为 1或2的数组

                        var divide = function(arr,length){

                            var mid = Math.round((length)/2);

                            if(length>2){

                                var arr1 = arr.splice(0,mid);

                                return merge(divide(arr1,arr1.length),divide(arr,arr.length));

                            }else{

                                return sortArr(arr,length);

                            }

                        }

                        //归并排序 arr1,arr2是两个已排序好的数组   对两个数组进行排序

                        var merge = function (arr1,arr2){

                            console.log('归并的两个数组:',arr1,arr2);

                            var arr0 = new Array(arr1.length+arr2.length);

                            var L1 = 0;//数组1的计数器

                            var L2 = 0;//数组2的计数器

                            for(var i = 0,L1=0,L2=0;i<arr0.length;i++){

                                if(L1==arr1.length){

                                    arr0[i] = arr2[L2];

                                    L2++;

                                    continue;

                                }

                                if(L2==arr2.length){

                                    arr0[i] = arr1[L1];

                                    L1++;

                                    continue;

                                }

                                if(arr1[L1]<arr2[L2]){

                                    arr0[i] = arr1[L1];

                                    L1++;   

                                }else{

                                    arr0[i] = arr2[L2];

                                    L2++;

                                }

                            }

                            console.log('归并结果为',arr0);

                            return arr0;

                        }

                        //把长度为1 或 2 的数组排序好

                        var sortArr = function(arr,length){

                            if(length!=1&&arr[0]>arr[1]){

                                var temp = arr[1];

                                arr[1] = arr[0];

                                arr[0] = temp;

                            }

                            console.log('排序好的数组为:',arr);

                            return arr;

                        }

                    

                        return divide(arr,arr.length);

                    }

                    

                    var _ing = guibing(_lok);

                    console.log(_ing);
  </script>

这是我所学到的,所以我要分享给你们,希望可以帮助到你们。

以上就是我的分享,新手上道,请多多指教大神勿喷

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值