二路归并排序

算法思想

将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。

思想:将待排序序列划分成若干个有序子序列;将两个或两个以上的有序子序列合并为一个有序序列。

 

算法图解

分而治之

 

 代码实现

复制代码
void Sort(int arr[],int left,int right);
int main(){
    int arr[N]={8,4,5,7,1,3,6,2};
    Sort(arr,0,N-1);
    printf("数组升序排列:");
    for (int i = 0; i < N; ++i) {
        printf("%d ",arr[i]);
    }
    printf("\n");
    return 0;
}
void Sort(int arr[],int left,int right){
    if(right==left){
        return;
    }
    int mid=(right+left)/2;
    Sort(arr,left,mid);
    Sort(arr,mid+1,right);

    int temp[N];
    int i=left;
    int j=mid+1;
    int k=left;
    while(i<=mid||j<=right){
        if(j>right||(i<=mid && arr[i]<arr[j])){
            temp[k]=arr[i];
            k=k+1;i=i+1;
        }else{
            temp[k]=arr[j];
            k=k+1;
            j=j+1;
        }
    }
    for (k = left; k <=right ; k++) {
        arr[k]=temp[k];
    }
}
复制代码

 

 运行结果

 

posted @   帅帅的编程之路  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示