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

news2024/12/26 21:03:20

每日小语

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

 自己思考

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

之前提到是冒泡排序对吧,就是比较比较比较,然后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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

赛捷CRM集成无需API开发:连接营销系统,优化电商用户运营和广告策略

赛捷CRM集成无需API开发&#xff1a;连接营销系统&#xff0c;优化电商用户运营和广告策略 在当前的电商热潮下&#xff0c;企业如何在竞争中脱颖而出&#xff0c;提高用户运营效率和广告策略的精准度&#xff0c;成为了关键性的挑战。赛捷CRM以其无需API开发的集成解决方案&a…

如何看待华为宣称“纯鸿蒙”OS将不再兼容安卓应用 APK彻底再见?

如何看待华为宣称“纯鸿蒙”OS将不再兼容安卓应用 APK彻底再见&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「安卓开发资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;…

Selenium自动化测试工具使用方法汇总

1、设置无头浏览器模式 from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options Options() chrome_options.add_argument(- -headless) chrome_options.add_argument(- -disable-gpu) class XX(object): self.driver webdriv…

微机原理10

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案,请将选定的答案填涂在答题纸的相应位置上。) 1.8086 中 IP 寄存器的作用是&#xff08;&#xff09; A. 保存当前栈顶地址 B. 保存代码段的基地址 C.指示下一条要执行的指令地…

ASP.NET《数据库原理及应用技术》课程指导平台的开发

1.1 系统设计目标 研制《数据库原理及应用技术》课程指导平台在功能上可以满足网络课堂教学活动的需要&#xff0c;在Internet上实现教学活动的各个环节。系统的基本设计原则有&#xff1a;先进性与方便性原则、功能实用性原则、开放性与可扩展性原则等。系统设计时采用较好的…

JS加密/解密之HOOK实战

之前的章节有介绍过Javascript的Hook相关的基础知识&#xff0c;相信大部分人也知道了什么是Hook&#xff0c;今天我们来讲一下Hook实战&#xff0c;实际的运用。 0x1.事上练 // 程序员们基本都喜欢简单精辟 直入主题 不喜欢咬文嚼字 我们先直接上代码 var _log console.log…

阿里云效一键部署前后端

静态站点到OSS 阿里云-云效&#xff0c;阿里云企业级一站式 DevOps&#xff0c;可以免费使用&#xff08;会限制人数、流水线数量等&#xff0c;个人项目够用了&#xff09;。相关文章 CI 持续集成 - 阿里云云效 OSS 是对象存储的意思&#xff0c;一般一个项目对应一个 Bucke…

Python:核心知识点整理大全2-笔记

在本章中&#xff0c;你将学习可在Python程序中使用的各种数据&#xff0c;还将学 习如何将数据存储到变量中&#xff0c;以及如何在程序中使用这些变量。 2.1 运行 hello_world.py 时发生的情况 运行hello_world.py时&#xff0c;Python都做了些什么呢&#xff1f;下面来深入…

环形链表 2:找出入环的第一个节点

题目描述&#xff1a; 给定一个链表返回链表开始入环的第一个点。如果链表无环&#xff0c;则返回NULL。 为了表示给定链表中的环&#xff0c;我们使用整数pos来表示链表尾连接到链表中的位置&#xff08;索引从0开始&#xff09;。如果pos是-1&#xff0c;则在该链表中没有环。…

D3485国产芯片+5V工作电压, 内置失效保护电路 具有+15kV IEC 61000-4-2接触放电保护能力 SOP8封装

D3485是一款5V供电、半双工的RS-485收发器&#xff0c;芯片内部包含一路驱动器和路接收器。D3485使用限摆率驱动器&#xff0c;能显著减小EMI和由于不恰当的终端匹配电缆所引起的反射&#xff0c;并实现高达10Mbps的无差错数据传输。D3485内置失效保护电路&#xff0c;保证接收…

【网络安全技术】密钥管理

一、分级密钥概念 典型的密钥分级分为三级&#xff0c;三级密钥就是一次会话的session key&#xff0c;用来加密通信&#xff0c;所以通常使用对称密钥。 二级密钥就是分发三级密钥的密钥&#xff0c;用来加密三级密钥来分发三级密钥。 一级密钥就是分发二级密钥的密钥&…

Markdown语法入门与进阶指南

一、Markdown简介 Markdown是一种轻量级标记语言&#xff0c;创始人为约翰格鲁伯&#xff08;john Gruber&#xff09;。它允许人们使用易读易写的纯文本格式编写文档&#xff0c;然后转换成有效的XHTML&#xff08;或者HTML&#xff09;文档。这种语言吸收了很多在电子邮件中…

RedHat8 安装部署DzzOffice协同办公平台+onlyoffice(docker)以及问题解决(亲测可用,花费2天)

一、基础配置(MysqlDzzoffice) 1&#xff1a;安装软件需要的环境&#xff0c;我们用LAMP的环境。基本上CentOS8自带的软件版本都达到安装DzzOffice的要求。 2&#xff1a;关闭防火墙&#xff08;不关的话需要开放80端口自行决定&#xff09;。 systemctl disable --now fire…

12.4散列查找定义,散列函数,散列查找(开放定址法,处理冲突),总结

散列函数定义 ASL计算 查找长度——在查找运算中&#xff0c;需要对比关键字的次数称为查找长度&#xff08;有的教材也会把“空指针”的判定算作一次比较&#xff09; 14&#xff0c;68&#xff0c;19&#xff0c;20&#xff0c;23&#xff0c;11这6个元素查一次就可以&…

分享73个节日PPT,总有一款适合您

分享73个节日PPT&#xff0c;总有一款适合您 73个节日PPT下载 链接&#xff1a;https://pan.baidu.com/s/1FG9Y-9yR31Y-fs3zxKI4Pg?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不…

轨道交通数字孪生可视化平台,助力城市交通运营智慧化

随着经济和科技的快速发展&#xff0c;轨道交通运营管理在日常操作者面临各种挑战。数字孪生技术被认为是未来轨道交通运营管理的重要手段之一。它可以提高轨道交通的运营效率和安全性&#xff0c;助力城市交通运营智慧化。以城市轨道交通运维管理业务需求为导向,从数据感知、融…

备忘录不小心删了怎么办?如何找回我的备忘录?

如果你的记性不太好&#xff0c;或者每天需要记住、完成的事情很多&#xff0c;那么养成随手记事的好习惯是非常有必要的。因为手机是每个成年人都会随身携带的电子设备&#xff0c;所以直接在手机上记录事情比较简单、便捷。而手机备忘录、便签、笔记等工具类软件&#xff0c;…

docker搭建nginx实现负载均衡

docker搭建nginx实现负载均衡 安装nginx 查询安装 [rootlocalhost ~]# docker search nginx [rootlocalhost ~]# docker pull nginx准备 创建一个空的nginx文件夹里面在创建一个nginx.conf文件和conf.d文件夹 运行映射之前创建的文件夹 端口&#xff1a;8075映射80 docker…

java版微信小程序商城免费搭建 java版直播商城平台规划及常见的营销模式有哪些?电商源码/小程序/三级分销

涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …

c++ atmoic acquire/release

由于多核cpu缓存的存在&#xff0c;以及gcc编译优化&#xff0c;cpu指令层面的优化&#xff0c;导致程序的执行顺序可能跟你写的顺序不完全一致&#xff08;reorder&#xff09;。 但是在多线程编程中如何确保各个线程能正确的读取到各个变量呢&#xff08;而不是cache中老旧的…