美文网首页
递归的思维和归并排序

递归的思维和归并排序

作者: _saule | 来源:发表于2017-07-28 22:53 被阅读0次

    第一、思维图如下:

    image.png

    第二、 代码区块如下:

    class MergeSort {
    public:
        int* mergeSort(int* A, int n) {
            // write code here
            _mergeSort(A,0,n-1);
            return A;
            
        }
        
        static void _mergeSort(int* _A,int _left,int _right){
            
            if(_left <_right)
                {
                int _middle=(_left + _right)/2;
                _mergeSort(_A,_left,_middle);
                _mergeSort(_A,_middle+1,_right);
                
                _merge(_A,_left,_middle,_right);
            }
    
        }
        
        static void _merge(int* _A,int _left,int _middle,int _right){
            
            int *L=new int[_middle - _left + 2];
            int *R=new int[_right - _middle + 1];
            
            
            for(int i=_left,x=0;i<=_middle;i++,x++){
                L[x]=_A[i];
            }
            
            for(int i=_middle+1,y=0;i<=_right;i++,y++)
                {
                R[y]=_A[i];
            }
            
            L[_middle - _left + 1]=INT_MAX;
            R[_right - _middle]=INT_MAX;
            
            int x=0,y=0;
            for(int i=_left;i<=_right;i++){
                if(L[x]<R[y]){
                    _A[i]=L[x++];
                }
                else{
                    _A[i]=R[y++];
                }
                
            }
            
            ////end of _merge.
        }
    
    };
    
    

    相关文章

      网友评论

          本文标题:递归的思维和归并排序

          本文链接:https://www.haomeiwen.com/subject/lbxqlxtx.html