当前位置: 首页 > news >正文

考研数据结构——C语言实现冒泡排序

冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,比较每对相邻元素,并在顺序错误的情况下交换它们。这个过程重复进行,直到没有需要交换的元素,这意味着列表已经排序完成。冒泡排序的名字来源于较小的元素会逐渐“冒泡”到列表的顶部(开始),而较大的元素沉到底部(末尾)。

下面是冒泡排序算法的详细步骤:

  1. 开始排序:从数组的第一个元素开始,比较相邻的元素。
  2. 比较和交换:如果当前元素大于下一个元素,就交换它们的位置。
  3. 遍历数组:继续这个过程,直到到达数组的末尾。
  4. 完成一轮遍历:在第一轮遍历结束后,最大的元素会被放置在数组的最后一个位置。
  5. 重复过程:重复上述过程,但每次开始时都从数组的开始位置开始,直到数组完全排序。

在代码中,这个过程通过两层嵌套的for循环实现:

  • 外层循环for (i = 1; i < n; i++))控制排序的轮数。每一轮都会将一个未排序的元素放到正确的位置。
  • 内层循环for (j = 0; j < n - i - 1; j++))负责实际的比较和交换。i的值表示已经排序好的元素数量,因此在每一轮中,比较的次数会减少。

在内层循环中,如果a[j]大于a[j + 1],就交换这两个元素的位置。这个过程会一直进行,直到内层循环完成,这意味着在当前轮次中,所有元素都已经被正确排序。

代码中的k变量用于临时存储一个元素的值,以便在交换时使用。

最后,使用另一个for循环遍历整个数组,并打印出排序后的元素。

需要注意的是,冒泡排序在最好的情况下(即数组已经是有序的)时间复杂度为O(n),在最坏的情况下(即数组是逆序的)和平均情况下时间复杂度为O(n^2),其中n是数组的长度。因此,对于大数据集,冒泡排序通常不是最有效的排序算法。

#include <stdio.h>
#include <stdlib.h>int main() {int a[] = { 12,4,132,55,46,232,789,1,0,98,523,666 };int n = sizeof(a) / sizeof(a[0]);int i, j, k;for (i = 1; i < n; i++) {for (j = 0; j < n - 1; j++) {if (a[j] > a[j + 1]) {k = a[j];a[j] = a[j + 1];a[j + 1] = k;}}}for (i = 0; i < n; i++) {printf("%d", a[i]);printf(" ");}return 0;
}

结果如下:

http://www.lryc.cn/news/445631.html

相关文章:

  • labview更换操作系统后打开原VI闪退
  • 什么是CAPTCHA?有什么用途?
  • 在虚幻引擎中创建毛发/头发
  • PHP API 框架:构建高效API的利器【电商API接口】
  • transformer模型写诗词
  • [大语言模型-工程实践] 手把手教你-基于Ollama搭建本地个人智能AI助理
  • 开放原子开源基金会OPENATOM
  • Docker的监控:docker stats与docker events
  • jvm专题 之 内存模型
  • 分布式计算框架
  • YOLO交通目标识别数据集(红绿灯-汽车-自行车-卡车等)
  • Vue学习记录之六(组件实战及BEM框架了解)
  • 为什么会出现电话机器人?语音电话机器人的出现起到了什么作用?
  • 【CSS Tricks】深入聊聊前端编写css的方法论
  • 多维时序 | GWO-VMD-SSA-LSTM灰狼优化变分模态分解联合麻雀优化长短期记忆网络多变量时间序列光伏功率预测(Matlab)
  • 5.使用 VSCode 过程中的英语积累 - Go 菜单(每一次重点积累 5 个单词)
  • Java高级Day50-连接池
  • 软件设计-开闭原则
  • Angular面试题八
  • 【Kubernetes】常见面试题汇总(三十六)
  • 深入解析SGD、Momentum与Nesterov:优化算法的对比与应用
  • Vue2实现主内容滚动到指定位置时,侧边导航栏也跟随选中变化
  • dev containers plugins for vscode构建虚拟开发环境
  • C++ | Leetcode C++题解之第433题最小基因变化
  • Qt窗口——QMenuBar
  • python网站创建001:内容概览
  • 代码随想录第22天|
  • WPF-基础-02 DispatcherObject类
  • STM32与51单片机的区别:是否应该直接学习STM32?
  • 【网络底层原理】I/O多路复用技术select、poll和epoll详解与比较