PTA7-12 排序 用归并排序进行实现 C语言

本文详细介绍了如何使用C语言实现基于归并排序的数组排序算法,通过递归调用函数对数组进行分治,最终完成排序过程。
摘要由CSDN通过智能技术生成

基于归并排序解决该问题

#include<stdio.h>

void pai(int nums[],int temp[],int start,int middle,int end)
//temp数组用于暂时存储排列好的数组
{
    int p=start;
    int i=start,j=middle+1;
    while(i<=middle&&j<=end)
    {
        if(nums[i]>nums[j])        //i所对应数值大于j所对应的数值,那就将nums[j]插入temp数组
        {
            temp[p++]=nums[j++];
        }
        else
        {
            temp[p++]=nums[i++];
        }
    }

    while(i<=middle)     //将剩余较大数插入temp数组
    {
        temp[p++]=nums[i++];
    }

    while(j<=end)
    {
        temp[p++]=nums[j++];
    }

    for(int i=start;i<=end;i++)    //来把temp数组返回到nums
    {
        nums[i]=temp[i];
    }
}

void dfs(int nums[],int temp[],int start,int end)
{
     if (start >= end) {  
        return;  
    }  
    else
    {
        int middle=(start+end)/2;
        dfs(nums,temp,start,middle);       //折半进行排序
        dfs(nums,temp,middle+1,end);
        pai(nums,temp,start,middle,end);    //折半调用
    }
}

int main()
{
    int sum;
    int nums[100001];

    scanf("%d",&sum);
    for(int i=0;i<sum;i++)
    {
        scanf("%d",&nums[i]);
    }

    int temp[100001];
    int start=0,end=sum-1;
    
    dfs(nums,temp,start,end);
    
    for(int i=0;i<sum;i++)
    {
        printf("%d",nums[i]);
        if(i!=sum-1)
        {
            printf(" ");
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值