鱼C论坛

 找回密码
 立即注册
查看: 3710|回复: 6

[已解决]一个简单的合并顺序表的问题,#C,如果可以的话不要用指针。

[复制链接]
发表于 2020-9-19 13:47:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
楼主上学期C语言学的很差劲
这学期的数据结构品尝到了恶果
代码以下,脑子一片混乱
楼主么学过任何排序,请尽量用循环体,插入,查找等操作。
请大佬指教
//合并两个已知的有序数组,要求合并后依然有序

#include<stdio.h>
#include<stdlib.h>
int main()
{int a[10]={1,3,5,7,9};
int b[10]={2,4,6,8,10};
int i=0;
int g=0;
int x,y;
int k=5;

for (i=0;i<=5;i++)
{        for (g=0;g<=5;g++)
{x=a[i];
y=b[g];
                if
                        (x>y)
                        for (;i<=k;i++)
        a[i+1]=a[i];}//元素后移
k=k+1;//a表长度加1
a[i]=y;//插入
else
a[i]=b[g];
                                }
for(;i<=10;i++)
printf("%d\n",a[i]);
                                               
                                                       
return 0;}
最佳答案
2020-9-19 15:06:48
你写的这是什么乱七八糟的啊。。。实在无法下手去修改。
格式乱
一个i在两层循环都使用,能不乱套么。。
我直接根据要求写了一下
#include<stdio.h>
int main()
{
    int a[10]={1,3,5,7,9};
    int b[10]={2,4,6,8,10};
    int i,j;//用于双层循环
    int k=4;//内层循环的初始值
    int t=9;//目标数组的下标值
    //倒序遍历两个数组,这样不用每次都向后移动各个数值
    for (i=4;i>=0;i--)
    {
        for (j=k;j>=0;j--)
        {
            if(a[i]>=b[j])//若数组a当前的值大于数组b当前的值,那么就跳出外层循环,将数组a当前的值放到目标位置
                break;
            a[t--]=b[j];//否则,将数组b当前的值放到目标位置,同时t--,目标位置向前移动
            k--;//数组b中已经有一个进行排序了,下次循环的时候就少了一个
        }
        a[t--]=a[i];//将数组a当前的值放到目标位置,同时t--,目标位置向前移动
    }
    for(i=0;i<10;i++)
        printf("%d\n",a[i]);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-19 15:05:00 | 显示全部楼层

回帖奖励 +2 鱼币

C#?#C 什么鬼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-19 15:06:48 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +2 鱼币

你写的这是什么乱七八糟的啊。。。实在无法下手去修改。
格式乱
一个i在两层循环都使用,能不乱套么。。
我直接根据要求写了一下
#include<stdio.h>
int main()
{
    int a[10]={1,3,5,7,9};
    int b[10]={2,4,6,8,10};
    int i,j;//用于双层循环
    int k=4;//内层循环的初始值
    int t=9;//目标数组的下标值
    //倒序遍历两个数组,这样不用每次都向后移动各个数值
    for (i=4;i>=0;i--)
    {
        for (j=k;j>=0;j--)
        {
            if(a[i]>=b[j])//若数组a当前的值大于数组b当前的值,那么就跳出外层循环,将数组a当前的值放到目标位置
                break;
            a[t--]=b[j];//否则,将数组b当前的值放到目标位置,同时t--,目标位置向前移动
            k--;//数组b中已经有一个进行排序了,下次循环的时候就少了一个
        }
        a[t--]=a[i];//将数组a当前的值放到目标位置,同时t--,目标位置向前移动
    }
    for(i=0;i<10;i++)
        printf("%d\n",a[i]);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-19 15:22:50 | 显示全部楼层

回帖奖励 +2 鱼币

感谢分享Q
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-19 20:41:52 | 显示全部楼层
感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-25 11:35:59 | 显示全部楼层

回帖奖励 +2 鱼币

代码额,有点乱啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-30 16:53:59 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 14:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表