鱼C论坛

 找回密码
 立即注册
查看: 1742|回复: 4

[已解决]数据结构的一个问题

[复制链接]
发表于 2020-9-25 17:02:18 | 显示全部楼层 |阅读模式

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

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

x
编写一个算法实现找出n个整数类型数据的顺序表中的最大数和最小数,然后将最大数放到最小数后面。如:原顺序表为:12,6,4,20,14,7,9,36,10,15,调整后顺序表为:12,6,4,36,20,14,7,9, 10,15。
解题思路大概清楚,就是不会用代码表现出来!
最佳答案
2020-9-25 17:31:54
本帖最后由 sunrise085 于 2020-9-25 17:40 编辑

先找出最大最小值的位置,然后把之间的都向后移动一下就可以了嘛
#include<stdio.h>

int main(){
    int numbers[]={12,6,4,20,14,7,9,36,10,15};
    int count,size=sizeof(numbers)/sizeof(numbers[0]);
    int min=0,max=0,temp;
    printf("移动之前……\n");
    for (count=0;count<size;count++)
        printf("%d  ",numbers[count]);
    for (count = 1;count < size; count++)//找最大最小值的位置
    {
        if (numbers[count] < numbers[min])
            min=count;
        if (numbers[count] > numbers[max])
            max=count;
    }
    temp=numbers[max];//保存最大值
    if (max>min)//若最大值在后则从max开始各数向后移动
    {
        for (count=max;count>min+1;count--)
            numbers[count]=numbers[count-1];
    }
    else//若最大值在前,则从max开始各数向前移动
    {
        for (count=max;count<min;count++)
            numbers[count]=numbers[count+1];
    }
    numbers[count]=temp;//把最大值放在最小值后面
    printf("\n移动之后……\n");
    for (count=0;count<size;count++)
        printf("%d  ",numbers[count]);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-25 17:08:40 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-25 17:12:03 | 显示全部楼层
最大最小我知道怎么求,就是把最大值放在最小值的后面这一步不知道怎么实现。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-25 17:15:04 | 显示全部楼层
liuyanxiong 发表于 2020-9-25 17:12
最大最小我知道怎么求,就是把最大值放在最小值的后面这一步不知道怎么实现。

1,请点回复,不然别人看不见

2,比如案例中的数据

先把36存到一个变量 temp 中,然后再把 原来 36 的位置赋值为 9,然后再把 原来 9 的位置赋值为 7,然后再把 原来 7 的位置赋值为 14,然后再把 原来 14 的位置赋值为 36 也就是 temp 变量,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-25 17:31:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-9-25 17:40 编辑

先找出最大最小值的位置,然后把之间的都向后移动一下就可以了嘛
#include<stdio.h>

int main(){
    int numbers[]={12,6,4,20,14,7,9,36,10,15};
    int count,size=sizeof(numbers)/sizeof(numbers[0]);
    int min=0,max=0,temp;
    printf("移动之前……\n");
    for (count=0;count<size;count++)
        printf("%d  ",numbers[count]);
    for (count = 1;count < size; count++)//找最大最小值的位置
    {
        if (numbers[count] < numbers[min])
            min=count;
        if (numbers[count] > numbers[max])
            max=count;
    }
    temp=numbers[max];//保存最大值
    if (max>min)//若最大值在后则从max开始各数向后移动
    {
        for (count=max;count>min+1;count--)
            numbers[count]=numbers[count-1];
    }
    else//若最大值在前,则从max开始各数向前移动
    {
        for (count=max;count<min;count++)
            numbers[count]=numbers[count+1];
    }
    numbers[count]=temp;//把最大值放在最小值后面
    printf("\n移动之后……\n");
    for (count=0;count<size;count++)
        printf("%d  ",numbers[count]);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 02:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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