zoukankan      html  css  js  c++  java
  • 归并排序

    基本过程

    1.将数组递归分解为有序数组(当分解到数组元素个数为1时候,数组自然有序)

    2.将两个有序数组合并为一个大的有序数组

    3.递归合并完成,即排序完成

    javascript实现

    function fMergeSort(arr,first,last,aTemp){
        if(first > last){
            throw new Error('first should less than last');
        }
        //取中对数组进行二分
        var mid = (first + last)/2;
        fMergeSort(arr,first,mid,aTemp);
        fMergeSort(arr,mid+1,last,aTemp);
        fMergeArray(arr,first,mid,last,aTemp);
    }
    
    function fMergeArray(arr,first,mid,last,aTemp){
        var k = 0,
            left = first,leftEnd = mid,
            right = mid+1,rightEnd = last;
        //将左右数组中较小者优先复制到临时数组
        while(left <= leftEnd && right <= rightEnd){
            if(arr[left] <= a[right]){
                aTemp[k++] = arr[left++];
            } 
            else{
                aTemp[k++] = arr[right++];
            }
        }
        //将left或right剩余元素复制到临时数组,left或right只会有一个剩余
        while(left <= leftEnd){
            aTemp[k++] = arr[left++];
        }
        while(right <= rightEnd){
            aTemp[k++] = arr[right++];
        }
        //将临时数组元素复制到元素数组中
        for(var i=0;i<k;i++){
            arr[first+i] = aTemp[i];
        }
    }
  • 相关阅读:
    008 同步
    007 优雅的关闭线程
    006 线程中的join方法
    005 线程ID和线程的优先级
    004 后台线程
    003 Thread的构造
    群发 图片和语音失败原因是 ,返回 content是 null,
    状态,
    Shape Of My Heart
    转码 的状态,嘿嘿,小bug,少了一个 !
  • 原文地址:https://www.cnblogs.com/mengff/p/6158470.html
Copyright © 2011-2022 走看看