冒泡排序(数组作为函数参数)

news2024/9/22 19:33:45

什么是冒泡排序?

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。

简而言之,就是两两相邻元素进行比较。

可以结合如下图进行理解。

 我们首先需要理解,数组名是什么?

#include <stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5 };
	printf("%p\n", arr);
	printf("%p\n", &arr[0]);
	printf("%d\n", *arr);
	//输出结果
	return 0;
}

%p打印地址,我们观察一下其运行结果。

我们可以观察到,arr 和 &arr[0] 的结果是相同的。由此我们也可以得出数组名是数组首元素的地址。

但是存在两个例外:

1. sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组。

2. &数组名,取出的是数组的地址。&数组名,数组名表示整个数组。

除此1,2两种情况之外,所有的数组名都表示数组首元素的地址。

以下就是冒泡排序(升序)的全部代码:

//冒泡排序
void bubble_sort(int arr[], int sz)//参数接收数组元素个数
{
     int i = 0;
     //一共有sz个参数,要比较sz-1次
     for (i = 0; i < sz - 1; i++)
     {
         int j = 0;
         //一趟比较,随着比较次数的不断增多,每一趟内部比较的次数减少
         for (j = 0; j < sz - i - 1; j++)
         {  
             //交换
             if (arr[j] > arr[j + 1])
             {
                 int tmp = arr[j];
                 arr[j] = arr[j + 1];
                 arr[j + 1] = tmp;
             }
         }
     }
}
int main()
{
    int arr[] = { 3,1,7,5,8,9,0,2,4,6 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr, sz);
    int i = 0;
    //打印数组内部的每一个数
    for (i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

运行结果:

我们可以对其进行优化,当后面的数字已经完全有序时或者刚开始比较有序时,可以减少排序次数,提高代码效率。

//对代码进行优化,当开始前已经有序,就不需要再进行重复操作,使效率变得更高一些
//冒泡排序
void bubble_sort(int arr[], int sz)//参数接收数组元素个数
{
    int i = 0;
    //一共有sz个参数,要比较sz-1次
    for (i = 0; i < sz - 1; i++)
    {
        int j = 0;
        //每一趟开始前就假设已经有序了
        int flag = 1;
        //一趟比较,随着比较次数的不断增多,每一趟内部比较的次数减少
        for (j = 0; j < sz - i - 1; j++)
        {
            //交换
            if (arr[j] > arr[j + 1])
            {
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
                flag = 0;
            }
        }
        if (flag == 1)
            break;
    }
}
int main()
{
    int arr[] = { 3,1,7,5,8,9,0,2,4,6 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr, sz);
    int i = 0;
    //打印数组内部的每一个数
    for (i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

如果想自行输入10个数字,自己规定顺序,可以考虑如下代码:

//冒泡排序
void bubble_sort(int arr[], int sz)//参数接收数组元素个数
{
    int i = 0;
    //一共有sz个参数,要比较sz-1次
    for (i = 0; i < sz - 1; i++)
    {
        int j = 0;
        //一趟比较,随着比较次数的不断增多,每一趟内部比较的次数减少
        for (j = 0; j < sz - i - 1; j++)
        {
            //交换
            if (arr[j] > arr[j + 1])
            {
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
}
int main()
{
    int arr[10] = { 0 };
    int j = 0;
    int sz = sizeof(arr) / sizeof(arr[0]);
    for (j = 0; j < sz; j++)
    {
        scanf("%d", &arr[j]);
    }
    bubble_sort(arr, sz);
    int i = 0;
    //打印数组内部的每一个数
    for (i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

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

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

相关文章

CVE-2020-7248 OpenWRT libubox标记二进制数据序列化漏洞(更新中)

提要 该文档会一直处于更新当中&#xff0c;当状态为完毕后&#xff0c;才是更新完成。由于网络上关于该漏洞原理的分析文档和资源实在是太少&#xff0c;而本人关于该方向也才是刚入门&#xff0c;能力有限&#xff0c;所以复现需要的时间较长&#xff0c;需要补充和学习的东西…

中国的AI技术水平,是否已经到了能够帮助创作者实现内容的程度?

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 是的&#xff0c;早就实现了&#xff0c;我从上年开始用AI辅助写小说&#xff0c;已经挣了2万多。 这是我在番茄那开的小号&#xff0…

Redis的集群模式

1. Redis三种集群模式 Redis 提供的三种集群模式各有其特点和适用场景&#xff0c;以下是对这三种模式的简要概述&#xff1a; 主从模式&#xff08;Master-Slave Replication&#xff09;&#xff1a; 在这种模式下&#xff0c;数据在主节点&#xff08;Master&#xff09;上…

服务器部署环境(docker安装Mysql + Redis + MongoDB)

1. 安装Docker 1、选择要安装的平台 Docker要求CentOS系统的内核版本高于3.10 uname -r #通过 uname -r 命令查看你当前的内核版本官网地址 2. 卸载已安装的Docker, 使用Root权限登录 Centos。确保yum包更新到最新。 sudo yum update如果操作系统没有安装过Docker , 就不需要…

自动化测试之python操作Oracle遇到的问题:Oracle-Error-Message: DPI-1047

自动化测试需要连接数据库&#xff0c;进行一些增删改查的操作&#xff0c;那么针对python语言&#xff0c;如何才能够通过程序完成连接数据库并且进行操作呢&#xff1f;可以通过cx_oracle这个模块来实现。 一、问题描述&#xff1a; 下面是我在实践的过程中遇到的问题&#…

面试知识储备-redis和redission

1.redis的使用 引入依赖&#xff0c;自动注解redistemplate即可使用&#xff0c; 默认的redistemplate存入到redis中是字符流的形式&#xff0c;需要配置redistemplate&#xff0c; 如果不想配置&#xff0c;可以使用stringRedistemplate 可以使用string类型&#xff0c;但是…

Python-numpy基础--------2

1.full()创建函数 目录 1.full()创建函数 2.创建单位矩阵 3.linspace创建 4.logspace 创建 5.二维数组的索引和切片&#xff1a; 1.索引直接获取 在NumPy中&#xff0c;full() 函数用于创建一个给定形状、类型的新数组&#xff0c;并用指定的值填充这个数组。这个函数非…

p24 p25作业讲解(2)

#include<stdio.h> #include<stdlib.h> int count_bit_one(int n) { int count0;while(n){if(n%21){count;}nn/2;}return count;} int main(){int a0;scanf("%d",&a);//写一个函数求a的二进制(补码)表示中有几个1int countcount_bit_one(a);printf(&…

C盘上的软件怎么移动到D盘?C盘满了,教你轻松转移软件到D盘

在日常使用电脑的过程中&#xff0c;我们经常会遇到C盘空间不足的情况。为了释放C盘的空间&#xff0c;或者为了更好地管理我们的软件和文件&#xff0c;我们可能需要将安装在C盘的软件移动到D盘。那么&#xff0c;C盘上的软件怎么移动到D盘呢&#xff1f;本文将介绍两种常用的…

Ubuntu-文件管理器中鼠标右键添加文本文件

文件管理器中鼠标右键添加文本文件 一、概述二、步骤 一、概述 Ubuntu在文管右键发现没有创建文本文件的菜单&#xff0c; 期望如下所示&#xff0c;这样的操作非常简单 二、步骤 找到模板文件夹 在模板文件夹&#xff0c;创建自己想要的文件就好啦 这个也是支持放文件夹去…

Microsoft 365 Office BusinessPro LTSC 2024 for Mac( 微软Office办公套件)

Microsoft 365 Office BusinessPro LTSC 2024是一款专为商业用户设计的办公软件套件&#xff0c;它集成了Word、Excel、PowerPoint等核心应用&#xff0c;并特别包含了Microsoft Teams这一强大的协作工具。Teams将聊天、会议、文件共享、任务管理等功能整合到一个平台上&#x…

听说宇哥突然大幅删减了新36讲?25张宇强化究竟行不行呀?

宇哥深夜划重点&#xff0c;大幅删减新36讲&#xff01; 宇哥最近舆论压力很大&#xff0c;很多人怕36讲暑假学不完了。 甚至一些人开始考虑&#xff0c;要不要转武忠祥&#xff1f; 张宇划的重点课&#xff0c;其实就是&#xff1a;概念要听&#xff0c;计算不用听。 因为强…

SQL Server 数据误删的恢复

在日常的数据库管理中&#xff0c;数据的误删操作是难以避免的。为了确保数据的安全性和完整性&#xff0c;我们必须采取一些措施来进行数据的备份和恢复。本文将详细介绍如何在 SQL Server 中进行数据的备份和恢复操作&#xff0c;特别是在发生数据误删的情况下。假设我们已经…

苹果微信数据恢复的教程?3个方法,一学就会!

各位家人朋友们&#xff01;你是否有遇到过微信数据误删或者是找不到的窘况呢&#xff1f;是不是时常会发现时间较为久远的微信聊天记录或者是文件已经过期无法打开呢&#xff1f;这些生活上的小烦恼大家都会有&#xff0c;但是大部分人都不知道该如何解决微信数据恢复问题。今…

大厂面试官问我:Mysql B+树索引中B最后一层是双向链表还是单向链表?为什么这么设计?【后端八股文十四:Mysql索引八股文合集】

本文为【Mysql索引八股文合集】初版&#xff0c;后续还会进行优化更新&#xff0c;欢迎大家关注交流~ hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏…

局部加全局视角遮挡人脸表情识别方法

一、摘要 实际场景中各种遮挡增加了表情识别难度。为此&#xff0c;提出一种滑块局部加权卷积注意力和全局注意力 池化的视觉 Transformer 结合的方法来解决遮挡问题。 利用主干网络提取表情特征图&#xff0c;将表情特征图裁剪成 多个区域块&#xff0c;利用局部 Patch 注意力…

Mem0 - 个人 AI 的内存层

文章目录 一、关于 Mem0核心功能&#x1f511;路线图 &#x1f5fa;️常见用例Mem0与RAG有何不同&#xff1f; 二、快速入门 &#x1f680;1、安装2、基本用法&#xff08;开源&#xff09;3、高级用法&#x1f527;4、大模型支持 三、MultiOn1、概览2、设置和配置4、将记忆添加…

【嵌入式开发之并发程序设计】守护进程的定义、特点、相关概念及创建

守护进程的定义 守护进程(Daemon Process)&#xff0c;又叫精灵进程、监控进程&#xff0c;是Linux三种进程类型之一&#xff0c;是 Linux 中的后台服务进程&#xff0c;是一个生存期较长的进程&#xff0c;通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事…

亚信安全与软银中国全资企业爱思比通信达成战略合作

近日&#xff0c;亚信安全携手软银集团旗下全资企业爱思比通信科技&#xff08;上海&#xff09;有限公司&#xff08;以下简称“爱思比通信”&#xff09; 共同宣布&#xff0c;双方正式签署战略合作协议。依托双方在技术、业务和资源三大层面的实力与优势&#xff0c;亚信安全…

2024-07-23 Unity AI行为树2 —— 项目介绍

文章目录 1 项目介绍2 AI 代码介绍2.1 BTBaseNode / BTControlNode2.2 动作/条件节点2.3 选择 / 顺序节点 3 怪物实现4 其他功能5 UML 类图 项目借鉴 B 站唐老狮 2023年直播内容。 点击前往唐老狮 B 站主页。 1 项目介绍 ​ 本项目使用 Unity 2022.3.32f1c1&#xff0c;实现基…