C语言实现冒泡排序

devtools/2024/9/23 0:38:40/

引入

我想大部分编程小白学的第一种排序算法都是冒泡排序吧,你还没弄懂?快来看看!!

源码

void input(int* p, int sz)
{for (int i = 0; i < sz - 1; i++){scanf("%d ", p + i);}
}void bubble_sort(int* p, int sz)
{for (int i = 0; i < sz; i++){int flag = 1;for (int j = 0; j < sz - i - 1; j++){if (p[j] > p[j + 1]){flag = 0;int tmp = p[j];p[j] = p[j + 1];p[j + 1] = tmp;}}if (flag)break;}
}
void print(int *p, int sz)
{for (int i = 0; i < sz; i++){printf("%d ", p[i]);}
}
int main()
{int arr[10] = { 0 };int sz = sizeof(arr) / sizeof(arr[0]);input(arr, sz);bubble_sort(arr, sz);print(arr, sz);return 0;
}

解释

上面的代码我们封装了三个函数,我们需要重点关注的是bubble_sort
代码的核心思想就是,相邻元素之间进行比较,不符合预期就交换顺序,每完成一趟都会使得一个数字到达正确的位置,再通过两层嵌套的循环来达到目的。
我们再看两层循环的嵌套,外层循环决定了循环的躺输,内存循环则决定了元素之间比较的次数
以下是需要明确的点:

  • 外层循环的循环条件是元素个数减一,比方说有十个数据要进行排序,九个数据都排到正确的位置,那么剩下的一个一定也处在正确位置
  • 内层循环的循环条件是元素个数减去本次循环的趟数再减一,因为每次排完一个元素之后都不需要继续和这个排好的元素进行比较
  • 设置flag变量,相当于是冒泡排序的一个优化,比方说本身输入的数据就是理想的顺序,那么就只需要一次外层循环来确定顺序是正确的,flag的值如果没有被改变,那么说明本次循环没有数据之间的交换,那么直接就结束循环


http://www.ppmy.cn/devtools/115711.html

相关文章

【计算机网络】运输层协议解析

前言 运输层直接为应用进程间的逻辑通信提供服务。运输层向高层用户屏蔽了下面网络核心细节&#xff08;如网络拓扑、路由选择协议等&#xff09;它使应用进程看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道。 UDP与TCP对比 UDP&#xff1a; 无连接 支持一对…

2024.9.22

写了一天的多项式 P3803 【模板】多项式乘法&#xff08;FFT&#xff09; P1919 【模板】高精度乘法 | A*B Problem P4721 【模板】分治 FFT 然后写了两道原题 P9117 [春季测试 2023] 涂色游戏 P9118 [春季测试 2023] 幂次 [P9119 [春季测试 2023] 圣诞树](

javase复习day30综合练习

制造假数据 制造数据 练习一 package Demo1;import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; im…

读取t x t文件生成exce

读取t x t文件生成excel package com.moka.api.custom.core.controller; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermode…

c语言中define使用方法

在C语言中&#xff0c;#define指令是预处理指令&#xff0c;用于定义宏。其常用格式是&#xff1a; 定义常量&#xff1a; #define 常量名 常量值 例子&#xff1a; #define PI 3.14159 #define MAX_SIZE 100 这里&#xff0c;PI和MAX_SIZE在代码中会被替换为其对应的值。没有…

音视频入门基础:AAC专题(8)——FFmpeg源码中计算AAC裸流AVStream的time_base的实现

音视频入门基础&#xff1a;AAC专题系列文章&#xff1a; 音视频入门基础&#xff1a;AAC专题&#xff08;1&#xff09;——AAC官方文档下载 音视频入门基础&#xff1a;AAC专题&#xff08;2&#xff09;——使用FFmpeg命令生成AAC裸流文件 音视频入门基础&#xff1a;AAC…

如何制作ubuntu启动U盘

步骤&#xff1a; 选择一个U盘&#xff0c;千万不要超过32G&#xff08;因fat32不支持超过32G的卷&#xff09;下载ubuntu镜像&#xff0c;我选择的是优麒麟的20.04&#xff0c;主要因为大小适中使用rufus工具将ubuntu镜像写入U盘在新电脑上插入U盘&#xff0c;进bios设置USB启…

ubuntu安装wordpress(基于LNMP环境)

参考链接 Ubuntu安装LNMP 安装步骤 环境需要LNMP环境&#xff0c;如果没有安装可以参考ZATA—LNMP简单安装 在mysql中设置wordpress所用的用户名和密码 #1. 登录mysql mysql -uroot -p #2. 创建wordpress数据库 create database wordpress; #3. 创建新用户user&#xff0c;…