c题目14:写成一个函数,对数组进行排序

每日小语

一个人倘若需要从思想中得到快乐,那么他的第一个欲望就是学习。——王小波

 自己思考

这不前几天刚搞的东西吗,就写成一个函数,这个有什么难的吗?我有时候那个分别心特重啊,真就别人拿到个啥好的比杀了我还难受,没关系,我承认我贱,我接受好吧,谁让我是个人呢。

之前提到是冒泡排序对吧,就是比较比较比较,然后chua比出来一个最大的,把它提前,后面的删了,然后再从删了的里面继续比较,就酱。写的时候吧,我脑袋里有好多问题,就我要输入一个数组,

那这个数组我该怎么计算有几个元素在里面呢?因为我需要它的切片索引来进行我的大业啊

然后呢我就想到strlen()但是吧,这个东西呢就我输入的这个东西我定义的是str,就连逗号都会算进去,呜呜呜。

所以当务之急就是明白c语言如何弄数组

int arr[5] = {1, 2, 3, 4, 5};
int i;

for (i = 0; i < 5; i++) {
    printf("arr[%d] = %d\n", i, arr[i]);
}

就gpt告诉我是这样,然后我就有了一点思路,emmmm,就是一点点对吧,刚刚脑袋里产生了一个新的想法,就是循环把它一个个填到这个空数组里。

写着写着我发现还需要一个计数器。

 又是这个离谱的问题,上次有个小同学用魔法帮我解决了,再次看到不禁感叹我还是不会。

第12行出现了两个错误:

  1. ij的定义:在代码的开头,使用了int i, j;来声明ij,但此时ij还没有被初始化,因此无法用它们来声明数组。你应该在读取num定义array数组,并使用正确的大小。

  2. 数组作为参数传递:在sort函数的参数中,你使用了array作为函数的参数,但在使用时没有指定数组的大小。你可以将数组大小作为另一个参数传递给sort函数,或者在代码中使用全局变量来定义数组的大小。

  3. 还有就是交换数字的时候设置了一个中间变量,我也搞不懂。在代码段p = array[j]; array[j] = array[i]; array[i] = p;中,通过引入临时变量p,我们可以在不丢失原始值的情况下交换两个

    //排序
    #include <stdio.h>
    int sort(int array[], int num)//要声明类型
    {
        for(int i=0;i<num;i++)
        {
            for(int j=i+1;j<num;j++)
            {
                int p;
                if(array[i]>array[j])
                {
                    p=array[j];
                    array[j]=array[i];//形参
                    array[i]=p;
                }
            }        
        }
        return 0;
    }
    int main()
    {
        int num=6;//这个num每次我只能自己提前设定好数组里的数字有几个,局限比较大。
        int array[6];
        for(int a=0;a<=6;a++)
        {
            printf("输入一个数组中的数字:");
            scanf("%d",&array[a]);
        }
        sort(array[6], num);
        return 0;
    }
    

    元素的位置。这是因为在这个代码段中,我们需要保留array[i]的值,以便将其赋给array[j],而将array[j]的值赋给array[i]如果直接进行赋值操作,会导致array[i]的值丢失。所以我们引入了临时变量p,用于暂存array[j]的值,然后完成两个元素的交换。

    //排序
    #include <stdio.h>
    int sort(int array[], int num)//要声明类型
    {
        for(int i=0;i<num;i++)
        {
            for(int j=i+1;j<num;j++)
            {
                int p;
                if(array[i]>array[j])
                {
                    p=array[j];
                    array[j]=array[i];//形参
                    array[i]=p;
                }
            }        
        }
    
    }
    int main()
    {
        int num=6;//这个num每次我只能自己提前设定好数组里的数字有几个,局限比较大。
        int array[6];
        for(int a=0;a<num;a++)
        {
            printf("输入一个数组中的数字:");
            scanf("%d",&array[a]);
        }
        sort(int array[], int num);
        printf("排好序的数组是:");
        for(int i=0;i<num;i++)
        {
            scanf("%d",array[i]);
        }
    }
    

    在输出排好序的数组时,应该使用printf()函数来打印数组元素,而不是使用scanf()函数。

gpt给的代码也不对呜呜呜。晚上再说。一个晚上竟然就变第三天了。

gpt代码

#include <stdio.h>

void bubbleSort(int array[], int num) {
    for(int i = 0; i < num - 1; i++) {
        for(int j = 0; j < num - i - 1; j++) {
            if(array[j] > array[j+1]) {
                // 交换相邻元素
                int temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
    }
}

int main() {
    int num = 6;
    int array[6];
    for(int a = 0; a < num; a++) {
        printf("输入一个数组中的数字:");
        scanf("%d", &array[a]);
    }

    bubbleSort(array, num);

    printf("排好序的数组是:");
    for(int i = 0; i < num; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");

    return 0;
}

这个代码完全可以正确运行,它在我自己敲写的基础上多了printf("\n");然后呢,修改了我定义的sort()函数。

i < num - 1;

这个代码改的我不是很理解,gpt said

在冒泡排序算法中,外部循环的条件 `i < num - 1` 是为了确保只进行 `num - 1` 轮比较。

循环变量 `i` 表示当前已经排序好的元素个数。在每一轮的比较过程中,相邻的两个元素会进行比较,并根据需要进行交换。通过不断将最大的元素“冒泡”到数组的末尾,经过 `num - 1` 轮的比较后,所有的元素将会按照升序排列。

为什么外部循环的终止条件是 `i < num - 1` 而不是 `i < num` 呢?

考虑一个包含 `num` 个元素的数组。在第一轮比较结束后,最大的元素一定被放置在数组的末尾。同样地,在第二轮比较结束后,第二大的元素会被放置在倒数第二个位置。通过这种方式,每一轮比较都将至少放置一个元素到其最终的位置上。

因此,在进行 `num - 1` 轮比较后,`num - 1` 个最大的元素都已经被正确地放置在了它们应该出现的位置上。最后一个元素无需再次进行比较,因为它已经处于正确的位置上了。因此,外部循环的终止条件是 `i < num - 1`,确保只进行 `num - 1` 轮比较。

`printf("\n")`

`printf("\n")`是C语言中的输出语句,用于在终端或控制台上打印一个换行符(newline)。换行符可以将输出的文本移到下一行的开头,常用于在输出中创建新行或产生空行。

在这个特定的代码示例中,`printf("\n")`语句用于在排好序的数组输出之后打印一个换行。它的作用是在控制台上将光标移动到下一行的开头,使得接下来的输出在下一行开始。

这样做主要是为了使输出更加可读,每次运行程序时,排好序的数组将会以一个单独的、新的一行显示出来。

其实这个也可以不要,我试过了

最终代码

撒花花~

#include <stdio.h>

void Sort(int array[], int num) {
    for(int i = 0; i < num - 1; i++) {//最后一个元素无需比较
        for(int j = 0; j < num - i - 1; j++) {
            if(array[j] > array[j+1]) {
                // 交换相邻元素
                int temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
    }
}

int main() {
    int num = 6;
    int array[6];
    for(int a = 0; a < num; a++) {
        printf("输入一个数组中的数字:");
        scanf("%d", &array[a]);
    }

    Sort(array, num);

    printf("排好序的数组是:");
    for(int i = 0; i < num; i++) {
        printf("%d ", array[i]);
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/215944.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

贸易公司ERP用什么软件好

不同行业的贸易公司有不同的业务结构和管理模式&#xff0c;日常经营管理过程中遇到的难点呈现多样化&#xff0c;而很多贸易公司在仓库、财务、销售、采购、订单、客户等业务一体化和部门协同效率等方面还有很多提升空间。 有些贸易公司涉及多仓库、多门店、多税制、多汇率、…

VUE2+THREE.JS 设定巡航行动轨迹

设定巡航行动轨迹 引入three.path初始化坐标点animate 执行行动轨迹动画参考博客 我们写3D时&#xff0c;常常会有按照一定轨迹去浏览模型&#xff0c; 所以,我们要先确认行动轨迹&#xff0c;渲染出行动轨迹以后&#xff0c;再让人物按照行动轨迹去移动 引入three.path cnpm …

性价比开放式蓝牙耳机推荐哪款、性价比最高的开放式耳机

传统的耳机设计虽然便携&#xff0c;但却可能给一些需要长时间佩戴的用户带来不适。长时间封闭在耳机内可能导致耳朵不透气&#xff0c;甚至引起疼痛。这就是为什么近年来开放式耳机越来越受欢迎的原因。这种耳机设计无需直接插入耳道&#xff0c;采用挂耳的佩戴方式&#xff0…

广州数字孪生赋能工业制造,加速推进制造业数字化转型

广州数字孪生赋能工业制造&#xff0c;加速推进制造业数字化转型。数字孪生系统基于历史数据、实时数据&#xff0c;采用人工智能、大数据分析等新一代信息技术对物理实体的组成、特征、功能和性能进行数字化定义和建模。通过构建在信息世界对物理实体的等价映射&#xff0c;对…

React 笔记 jsx

严格约定&#xff1a;React 组件必须以大写字母开头&#xff0c;而 HTML 标签则必须是小写字母。 React JSX JSX 是由 React 推广的 JavaScript 语法扩展。 用于表达组件的 特殊语法的 js 函数 要求标签必须闭合&#xff1b;返回的组件必须包裹在一个父标签内&#xff1b; …

【Linux】echo命令使用

​echo命令 功能是在显示器上显示一段文字&#xff0c;一般起到一个提示的作用。此外&#xff0c;也可以直接在文件中写入要写的内容。也可以用于脚本编程时显示某一个变量的值&#xff0c;或者直接输出指定的字符串。 ​ 著者 由布莱恩福克斯和切特拉米撰写。 语法 echo […

UOS打印任务监控

UOS系统下如何对一个打印任务进行监控呢? 首先,UOS系统是支持这个功能。比如说我们打印一个任务后,UOS自带的打印管理器是能知道打印任务的状态的: 经过研究,最终发现了他的监控原理。 还得是DBus 没错,还是得通过DBus来实现打印任务监控。 话不多说,直接上代码: …

Linux 文件查找

1 文件查找 在文件系统上查找符合条件的文件 文件查找&#xff1a;locate&#xff0c;find 1.1 locate 工作特点&#xff1a; 格式&#xff1a; Usage: locate [OPTION]... [PATTERN]...常用选项&#xff1a; -i &#xff1a;不区分大小写的搜索 -n N &#xff1a;只列举前…

Linux下Redis安装及配置

首先下载redis安装包&#xff1a;地址 这里我使用的是7.0版本的&#xff01; 将文件上传至linux上&#xff0c;此处不再多叙述&#xff0c;不会操作的&#xff0c;建议使用ftp&#xff01; 第一步&#xff1a;解压压缩包 tar -zxvf redis-7.0.14.tar.gz第二步&#xff1a;移…

代码随想录第二十三天(一刷C语言)|组合总数组合总数II分割回文串

创作目的&#xff1a;为了方便自己后续复习重点&#xff0c;以及养成写博客的习惯。 一、组合总数 思路&#xff1a;参考carl文档 定义两个全局变量&#xff0c;二维数组result存放结果集&#xff0c;数组path存放符合条件的结果。&#xff08;这两个变量可以作为函数参数传入…

使用SD-WAN新方式,解锁分公司访问总部私有云

某企业是一家跨地区运营的大型企业&#xff0c;总部位于上海&#xff0c;拥有多个分公司遍布全国。其中北京分公司作为该企业在北方地区的重要分支机构&#xff0c;负责着该地区的市场开拓和业务发展。 为了实现分公司与总部之间的有效沟通和信息共享&#xff0c;北京分公司使用…

特征点 -- 《视觉SLAM十四讲 从理论到实践(第2版)》

什么是特征点&#xff1f; 特征点就是图像中一些特别的地方&#xff0c;例如图像中的角点&#xff0c;在不同图像之间的辨识度更强&#xff0c;一种直观的提取特征的方式就是在不同图像之间辨认角点&#xff0c;确定它们的对应关系。 OpenCV中已经有了很多实用的特征提取和匹配…

安科瑞参加全国建筑电气设计技术协作及情报交流网2023年会-安科瑞 蒋静

2023年11月19日~20日&#xff0c;广州市东方宾馆内人潮涌动&#xff0c;热闹非凡&#xff0c;全国建筑电气设计技术协作及情报交流网2023年年会暨“建筑电气传承与创新”高峰论坛在此盛大举办。 会议由全国建筑电气设计技术协作及情报交流网、中国建筑东北设计研究院有限公司主…

云原生之深入解析如何限制Kubernetes集群中文件描述符与线程数量

一、背景 linux 中为了防止进程恶意使用资源&#xff0c;系统使用 ulimit 来限制进程的资源使用情况&#xff08;包括文件描述符&#xff0c;线程数&#xff0c;内存大小等&#xff09;。同样地在容器化场景中&#xff0c;需要限制其系统资源的使用量。ulimit: docker 默认支持…

超详细的性能测试实战教程

之前有在自己建的测试群直播分享了一些性能测试的基础内容&#xff0c;当时有人说希望有个实战的分享&#xff0c;想了想某些东西属于公司机密不方便直接直播分享&#xff0c; 这里就拿最近我做的一个性能测试实例来举例子说说&#xff0c;理解为主。。。 先看看一个完美的性…

双击热备方案实现(全)

双击热备是应用与服务器的一种解决方案&#xff0c;其构造思想是主机和从机通过TCP/IP网络连接&#xff0c;正常情况下主机处于工作状态&#xff0c;从机处于监视状态&#xff0c;一旦从机发现主机异常&#xff0c;从机将会在很短的时间内代替主机。完全实现主机的功能。 要想实…

SQL Server 数据库,创建数据表

2.3表的基本概念 表是包含数据库中所有数据的数据库对象。数据在表中的组织方式与在电子表格中相似&#xff0c;都是 按行和列的格式组织的&#xff0c;每行代表一条唯一的记录&#xff0c;每列代表记录中的一个字段.例如&#xff0c;在包含公 司员工信息的表中&#xff0c;每行…

antv x6填坑指南: 部分节点拖拽和操作撤销重做不生效问题、使用Stencil过滤时过滤后分组的显示高度无法根据过滤节点自适应问题

问题1. 部分分组中节点拖拽添加或操作后撤销重做操作不生效。 前提&#xff1a;使用Stencil插件&#xff0c;创建画布侧边栏的 UI 组件&#xff0c;同时使用其分组、折叠能力。分组包含固定分组、后台接口获取的动态分组和组件。 //固定分组初始化 initStencil (graph, stenc…

Redis中缓存穿透、击穿、雪崩以及解决方案

目录 一、Redis 介绍 二、Redis 缓存穿透 三、Redis 缓存击穿 四、Redis 缓存雪崩 一、Redis 介绍 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中间件。它支持多种数据结构&#xf…

centos7防火墙开启端口

1.查看防火墙状态 firewall-cmd --state如果返回的not running&#xff0c;那么需要先开启防火墙 2.开启关闭防火墙 systemctl start firewalld.service systemctl stop firewalld.service systemctl restart firewalld.service3.开放指定端口 firewall-cmd --zonepublic -…