m0_73553565 2022-09-26 19:28
浏览 20
已结题

为什么我的Double sort 函数在devc上运行不了啊,同学的都可以,就是显示不出来排序后啊

#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;

#define MAX_SIZE 10

void Double_Merge(ElemType r1[],int left, int mid, int right, ElemType r2[])
/已知r1[left,mid]和r1[mid+1,right]已分别有序排列,
将它们合并成一个有序序列放在r2[left,right]
/
{
int i=0, j=0, k=0;
i=left;
j=mid+1;
k=left; // r2的索引

while ((i<=mid) && (j<=right))
{
    if (r1[i] <= r1[j])
    {
        r2[k] = r1[i];
        i++;
    }
    else // r1[j] < r1[i]
    {
        r2[k] = r1[j];
        j++;
    }
    k++;
 } 
 
while (i<=mid) // j > right右半已读完 
{
     r2[k] = r1[i]; // 读取左边剩下的
    k++;
    i++; 
}
while (j<=right) // i>mid左半已读完
{
     r2[k] = r1[j];
     k++;
     j++;
} 

}

void Double_Sort(ElemType r1[], int left, int right, ElemType r3[])
{
ElemType *ptr_r2; // 辅助空间
ptr_r2=(ElemType *)malloc((right-left+1) * sizeof(ElemType));

 int mid=0;
 if(ptr_r2 == NULL)
 {
     printf("\n Sorry,Can not Allocate Memory For r2!");
     exit(-100);
 }
 
 if(left==right) // 只有一个元素 
 {
     r3[left]=r1[left];
 }
 else
 {
     mid=(left+right)/2;
     Double_Sort(r1,left,mid,ptr_r2); // 排序左半序列 放到r2 
     Double_Sort(r1,mid+1,right,ptr_r2); // 排序右半序列 放到r2 
     Double_Merge(ptr_r2,left,mid,right,r3); // 左右合并到r3 
 }
 free(ptr_r2);

}

int main(void)
{
int i = 0;
ElemType source[MAX_SIZE], dest[MAX_SIZE];

  for (i=0;i<MAX_SIZE;i++)
 {
     source[i] = 20 * (MAX_SIZE - i);
     dest[i] = 0;
 }
 
 printf("\n 排序前:\n");
 for (i=0; i<MAX_SIZE;i++)
 {
     printf("%d\t", source[i]);
     if((i+1)%10 == 0)
     {
         printf("\n");
     }    
 }
 
 Double_Sort(source, 0, MAX_SIZE-1, dest);
 
 printf("\n 排序后:\n");
 for (i=0; i<MAX_SIZE;i++)
 {
     printf("%d\t", dest[i]);
     if((i+1)%10 == 0)
     {
         printf("\n");
     }    
 }    
 
 return 0; 

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月4日
    • 创建了问题 9月26日

    悬赏问题

    • ¥15 咨询一下有关于王者荣耀赢藏战绩
    • ¥100 求购一套带接口实现实习自动签到打卡
    • ¥50 MacOS 使用虚拟机安装k8s
    • ¥500 亚马逊 COOKIE我如何才能实现 登录一个亚马逊账户 下发新 COOKIE ..我使用下发新COOKIE 导入ADS 指纹浏览器登录,我把账户密码 修改过后,原来下发新COOKIE 不会失效的方式
    • ¥20 玩游戏gpu和cpu利用率特别低,玩游戏卡顿
    • ¥25 oracle中的正则匹配
    • ¥15 关于#vscode#的问题:把软件卸载不会再出现蓝屏
    • ¥15 vimplus出现的错误
    • ¥15 usb无线网卡转typec口
    • ¥30 怎么使用AVL fire ESE软件自带的优化模式来优化设计Soot和NOx?