快速排序和归并排序

当全局变量和局部变量重合时采用就近原则。
辗转相除法:
辗转相除法的基本思路是,对正整数a和b,连续进行求余运算,直到余数为0为止,此时非0的除数就是最大公约数。设r=a mod b表示a除以b的余数,若r≠0,则将b作为新的a,r作为新的b,重复a mod b运算,直到r=0时为止,此时b为所求的最大公约数。例如,50和15的最大公约数的求解过程可表示为:Gcd(50, 15)=Gcd(15, 5)=Gcd(5, 0)=5。
快速排序:

 、、快速排序
        function swap (arr,low,high) {
            var temp;
            temp=arr[low];
            arr[low]=arr[high];
            arr[high]=temp;
        }

        function rKey(arr,low,high) {
            var pkey=arr[low];
            while (low<high) {
                while (high>low&&(arr[high]>=pkey)) {
                    high--;
                    }
                swap(arr,low,high);    
                while (high>low&&(arr[low]<=pkey)) {
                    low++;
                }    
                swap(arr,low,high);
            }  
            return low;
        }
        function qSort(arr,low,high) {
            if (high>low) {
                var key=rKey(arr,low,high);
                qSort(arr,low,key-1);
                qSort(arr,key+1,high);
            }
        }
        function Qsort(arr) {
            qSort(arr,0,arr.length-1);
        }
        Qsort(arr);
        console.log(arr);

归并排序:

// 归并排序
        var arr=[23,4,6,1,8,9,22,33,55,2];
        function merge(arr,start,mid,end) {
            var arr1=[];
            var i=start;
            var j=mid+1;
            var k=0;
            while (i<=mid&&j<=end) {
                if (arr[i]<arr[j]) {
                    arr1[k++]=arr[i++];

                }else {
                    arr1[k++]=arr[j++];
                }
            }
            if (i==mid+1) {
                while (j<end+1){
                    arr1[k++]=arr[j++];

                }
            }
            if (j==end+1) {
                 while (i<mid+1) {
                    arr1[k++]=arr[i++];
                }
            }
            for (var a=0,b=start;a<k;a++,b++) {
                arr[b]=arr1[a];
            }
            // return arr;
        }
        function mergeSort(arr,start,end) {
            if (start>=end) {
                return;
            }
            var mid=parseInt((start+end)/2);
            mergeSort (arr,start,mid);
            mergeSort (arr,mid+1,end);
            merge(arr,start,mid,end);

            // console.log (arr);
        }
        mergeSort(arr,0,arr.length-1);
        // merge(arr,0,4,9);
        console.log (arr);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值