• 归并排序


    归并排序的思想是将数组分成n个有序的数组

    刚开始可以想象把数组分成length个数组,每个数组只有一个元素

    那么他们一定是有序的

    然后不停的将两个有序的数组进行合并,最后合并成完整的数组

    代码如下

    void Merge(int arr[],int nLow,int nHigh)
    {
        int nBegin1;
        int nBegin2;
        int nEnd1;
        int nEnd2;
        
        //再分组 
        nBegin1 = nLow;
        nEnd1 = nLow +(nHigh-nLow)/2;
        nBegin2 = nEnd1+1;
        nEnd2 = nHigh;
        //申请一个辅助数组 
        int *pTemp = NULL;
        pTemp = (int*)malloc(sizeof(int)*(nHigh-nLow+1));
    
        int i;
        i = 0;
        //将分完的两个有序数组中的元素依次插入到辅助数组中 
        while(nBegin1 <= nEnd1 && nBegin2 <= nEnd2)
        {
            if(arr[nBegin1] < arr[nBegin2])
            {
                pTemp[i] = arr[nBegin1];
                i++;
                nBegin1++;
            }
            else
            {
                pTemp[i] = arr[nBegin2];
                i++;
                nBegin2++;
            }
        }
    
        //此时可能会有一个有序数组中有元素
        //将其剩余元素插入到辅助数组中 
        while(nBegin1 <= nEnd1)
        {
            pTemp[i] = arr[nBegin1];
            i++;
            nBegin1++;
        }
    
        while(nBegin2 <= nEnd2)
        {
            pTemp[i] = arr[nBegin2];
            i++;
            nBegin2++;
        }
    
        //把辅助数组中的值赋值到原数组中去 
        for(i = 0;i<nHigh-nLow+1;i++)
        {
            arr[nLow+i] = pTemp[i];
        }
    
        free(pTemp);
        pTemp = NULL;
    }
    
    void MergeSort(int arr[],int nLow,int nHigh)
    {
        if(arr == NULL || nLow >= nHigh)return;
        
        int nMid;
        nMid = nLow + (nHigh-nLow)/2;
    
        //分组 
        MergeSort(arr,nLow,nMid);
        MergeSort(arr,nMid+1,nHigh);
    
        //合并 
        Merge(arr,nLow,nHigh);
    }
  • 相关阅读:
    c# 微信开发 《生成带参数的关注二维码》
    c# 微信开发 《获取用户的信息》
    c# 微信开发 《保存图片生成素材ID》
    c# 微信开发 《主动发送内容》
    c# 微信开发 《内容回复或事件触发》
    c# 微信开发 《生成菜单》
    记一些有趣的事
    该如何看待工作?
    学习PPT
    工作需要的软素质
  • 原文地址:https://www.cnblogs.com/TheQi/p/9115343.html
Copyright © 2020-2023  润新知