C语言程序设计十大排序—冒泡排序

ops/2025/1/22 16:09:09/

文章目录

  • 1.概念✅
  • 2.冒泡排序🎈
  • 3.代码实现✅
    • 3.1 直接写✨
    • 3.2 函数✨
  • 4.总结✅

1.概念✅

  排序是数据处理的基本操作之一,每次算法竞赛都很多题目用到排序。算法>排序算法是计算机科学中基础且常用的算法,排序后的数据更易于处理和查找。在计算机发展的历程中,在算法>排序算法的研究一直深受人们重视,出现了很多算法,在思路、效率、应用等方面各有特色。通过学习算法>排序算法,读者可以理解不同算法的优势和局限性,并根据具体情况选择最合适的算法,以提高程序的性能和效率。学习算法>排序算法还有助于培养逻辑思维和问题解决能力,在解决其他类型的问题时也能够应用到类似的思维方法。

2.冒泡排序🎈

 冒泡排序(Bubble Sort)也是一种简单、直观的算法>排序算法,它的算法思想和选择排序差不多,略有区别。
 第一轮,找到最大的数,放到第n个位置:
 第二轮,找到第2大的数,放到第n-1个位置;
 ......
 第n轮,找到最小的数,放到第1个位置。
 与选择排序的原理过于简单相比,冒泡排序用到了“冒泡”这个小技巧。以“第一轮,找最大的数,放到第n个位置”为例,对a[0]~a[n-1]做冒泡排序,操作如下:
 (1)从第1个数a[0]开始,比较a[0]和a[1],如果a[0]>a[1],交换。进一步把前面两个数的最大数放到了第2个位置,如下图所示。

排序前
 (2)比较a[1]和a[2],如果a[1]>a[2],交换,这一步把前面3个数的最大数放到了第3个位置,如下图所示:
排序后
 (3)比较a[2]和a[3]…
  依次比较相邻的两个数,直到最后两个数a[n-2]和a[n-1],就把最大的数放到了第a[n-1]个位置。一共比较了n-1次。
  将这个过程形象地比喻为“冒泡”,最大的元素像气泡一样慢慢“浮”到了顶端。
  以上是“第一轮,最大元素的冒泡”,其他的数也同样的方法处理,一共做n-1轮冒泡。第i轮找到第i大的数,冒泡到a[i-1],就把第i大的数放到了第i个位置。

3.代码实现✅

3.1 直接写✨

#include <stdio.h>int main() {int arr[] = {13, 14, 52, 12, 22, 11, 90}; // 原始数组int n = sizeof(arr) / sizeof(arr[0]); // 数组大小int temp,i,j;printf("排序前:");for ( i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");for (i = 0; i < n - 1; i++) {for (j = 0; j < n - 1 - i; j++) {if (arr[j] > arr[j + 1]) {// 交换temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}printf("排序后:");for ( i = 0; i < n; i++) {printf("%d ", arr[i]);}
}

3.2 函数✨

#include <stdio.h>void bubbleSort(int arr[], int n) {int temp,i,j;for (i = 0; i < n - 1; i++) {// 设置一个标志位,用于优化int swapped = 0;for (j = 0; j < n - 1 - i; j++) {if (arr[j] > arr[j + 1]) {// 交换temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;// 标记有元素交换swapped = 1;}}// 如果没有发生交换,数组已经排好序if (swapped == 0) {break;}}
}void printArray(int arr[], int n) {int i;for ( i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");
}int main() {int arr[] = {13, 14, 52, 12, 22, 11, 90}; // 原始数组int n = sizeof(arr) / sizeof(arr[0]); // 数组大小bubbleSort( arr, n);printArray( arr, n);
}

4.总结✅

  冒泡排序的计算复杂度:第5行和第8行有两重for循环计算复杂度为O(n^2),和选择排序的计算复杂度一样。
  冒泡排序可以做一点优化:若两个相邻的数已经有序,那么不用冒泡;在第i轮求第i大的数时,若一次冒泡都没有发生,说明整个数列已经有序,算法结束。

Perspective-takling


http://www.ppmy.cn/ops/152225.html

相关文章

PHP CRM售后系统小程序

&#x1f4bc; CRM售后系统 &#x1f4fa;这是一款基于PHP和uniapp深度定制的CRM售后管理系统&#xff0c;它犹如企业的智慧核心&#xff0c;精准赋能销售与售后管理的每一个环节&#xff0c;引领企业步入精细化、数字化的全新管理时代。系统集成了客户管理、合同管理、工单调…

kotlin语言

简介 Kotlin由JetBrains公司开发。谷歌宣布其成为安卓第一开发语言。 兼容Java&#xff0c;可以和Java混编。 语言类型 编译型 编译器直接将源代码一次性编译成与CPU相配的二进制文件&#xff0c;计算机可直接执行&#xff0c;例如C,C。 特点&#xff1a;一次编译。不同操…

vue+arcgis api for js实现地图测距的分段统计线段长度

vue页面调用代码&#xff1a; <template><el-button click"handleMeasureDis">地图测距</el-button><el-button click"handleClear">清除</el-button> </template> import measureDistance from /views/fisheryMap/c…

【MySQL】存储引擎有哪些?区别是什么?

频率难度60%⭐⭐⭐⭐ 这个问题其实难度并不是很大&#xff0c;只是涉及到的相关知识比较繁杂&#xff0c;比如事务、锁机制等等&#xff0c;都和存储引擎有关系。有时还会根据场景选择不同的存储引擎。 下面笔者将会根据几个部分尽可能地讲清楚 MySQL 中的存储引擎&#xff0…

豆瓣Top250电影的数据采集与可视化分析(scrapy+mysql+matplotlib)

文章目录 豆瓣Top250电影的数据采集与可视化分析(scrapy+mysql+matplotlib)写在前面数据采集(Visual Studio Code+Navicat)1.观察网页信息2.编写Scrapy代码(Visual Studio Code)2.1 创建Scrapy项目`doubanProject`2.2 创建爬虫脚本`douban.py`2.3 修改`douban.py`的代码2…

springboot基于微信小程序的停车场预订系统

Spring Boot 基于微信小程序的停车场预订系统 在城市交通日益拥堵&#xff0c;停车难问题愈发凸显的当下&#xff0c;Spring Boot 基于微信小程序的停车场预订系统为车主们提供了便捷高效的停车解决方案&#xff0c;让出行停车变得从容有序。借助 Spring Boot 强大的后端开发能…

玩转 LangChain:从文档加载到高效问答系统构建的全程实战

系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChain&#xf…

LDN的蓝牙双模键盘帮助文档

文档索引 已支持的PCB列表(仅列出少部分)&#xff1a;键盘特性硬件软件键盘以及驱动蓝牙模式USB模式 驱动功能介绍主界面键盘列表页面键盘配置&#xff08;使用双模键盘的请务必细看本说明&#xff09;功能层配置(改键)触发层配置(改FN键等触发功能)功能选择&#xff08;重要&a…