C语言冒泡排序算法及代码

C语言冒泡排序算法及代码C 语言冒泡排序算法及代码冒泡排序是排序算法的一种 思路清晰 代码简洁 常被用在大学生计算机课程中 冒泡 这个名字的由来是因为越大的元素会经由交换慢慢 浮 到数列的顶端 故名 这里以从小到大排序为例进行讲解 基本思想及举例说明冒泡排序的基本思想就是不断比较相邻的两个数 让较大的元素不断地往后移 经过一轮比较 就选出最大的数 经过第 2 轮比较 就选出次大的数 以此类推 下面以对 32

C语言冒泡排序算法及代码

冒泡排序是排序算法的一种,思路清晰,代码简洁,常被用在大学生计算机课程中。

“冒泡”这个名字的由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。

下面以对 3 2 4 1 进行冒泡排序说明。

第一轮,逐个比较(R[1], R[2]), (R[2], R[3]), (R[3], R[4]), ……. (R[N-1], R[N]) ; 最大的元素会被移动到R[N]上。

第二轮,逐个比较(R[1], R[2]), (R[2], R[3]), (R[3], R[4]), ……. (R[N-2], R[N-1]);第二大元素会被移动到R[N-1]上。

下面给出了冒泡排序的一般实现和优化实现。一般实现是教科书里常见的实现方法,无论数组是否排序好了,都会进行N-1轮比较; 而优化实现,在数组已经排序好的情况下,会提前退出比较,减小了算法的时间复杂度。

#include 
     #include 
     #define N 8 void bubble_sort(int a[],int n); //*一般实现* void bubble_sort(int a[],int n)//n为数组a的元素个数 { 
    //一定进行N-1轮比较 for(int i=0; i<n-1; i++) { 
    //每一轮比较前n-1-i个,即已排序好的最后i个不用比较 for(int j=0; j<n-1-i; j++) { 
    if(a[j] > a[j+1]) { 
    int temp = a[j]; a[j] = a[j+1]; a[j+1]=temp; } } } } //*优化实现* void bubble_sort_better(int a[],int n)//n为数组a的元素个数 { 
    //最多进行N-1轮比较 for(int i=0; i<n-1; i++) { 
    bool isSorted = true; //每一轮比较前n-1-i个,即已排序好的最后i个不用比较 for(int j=0; j<n-1-i; j++) { 
    if(a[j] > a[j+1]) { 
    isSorted = false; int temp = a[j]; a[j] = a[j+1]; a[j+1]=temp; } } if(isSorted) break; //如果没有发生交换,说明数组已经排序好了 } } int main() { 
    int num[N] = { 
   89, 38, 11, 78, 96, 44, 19, 25}; bubble_sort(num, N); //或者使用bubble_sort_better(num, N); for(int i=0; i<N; i++) printf("%d ", num[i]); printf("\n"); system("pause"); return 0; } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221709.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午5:27
下一篇 2026年3月17日 下午5:28


相关推荐

  • 用matlab绘制二元函数图像_心形函数表达式

    用matlab绘制二元函数图像_心形函数表达式文章目录Matlab二元函数图像绘制plot3函数的基本用法fplot3函数基本用法进阶用法绘制二元函数图像Matlab二元函数图像绘制在讲二元函数图像绘制之前,先讲解plot3与fplot3的实际用法,之后再讲解二元函数图像绘制,有需要的同学可直接跳转查看。plot3函数的基本用法本节通过循序渐进的方法,先介绍简单的plot3用法,接着再一步一步进阶难度,并且在代码中给出每块代码的功能以及使用方法,以帮助大家更快的学习使用。实例1:绘制三维直线%给定x、y、z的数值x=[1,2,3];

    2025年9月30日
    5
  • 弗曼技巧笔记

    弗曼技巧笔记弗曼技巧学习过程:选择一个概念 向其他人讲解这个概念 对讲解中出现的卡壳发现不懂的问题,回头去进一步学习学习过程中使用流程图,便于理解与记忆。弗曼技巧注重于正负反馈,有了正负反馈才能够对知识进行更好的理解。不同方式下学习内容留存率:弗曼技巧使用了最有效的方式—教授给他人。讲解的方式:可以依靠简化或类比的方式进行讲解,直到对方理解。…

    2022年6月14日
    35
  • ensp静态路由配置(详细)

    ensp静态路由配置(详细)ensp 静态路由配置 详细 一 首先了解一下数据转发过程中路由器的工作原理路由器的工作原理 1 解封装 此处解封装的前提是目的 mac 地址是自己才能解封装 2 根据目的 ip 查路由表转发数据 查看路由表的命令 Huawei displayiprou table 此处分两种情况 情况 1 如果目的 ip 在路由表中 则会把数据转发到相应的出接口情况 2 如果目的 ip 不在路由表中 则把数据丢了就可以了二 搭建好拓扑图拓扑图如下 图中我已经标好了每个接

    2026年3月19日
    2
  • spring依赖注入三种方式

    spring依赖注入三种方式spring 依赖注入

    2026年3月17日
    2
  • 12v继电器驱动电路

    12v继电器驱动电路转载于:https://www.cnblogs.com/prayer521/p/5981336.html

    2022年6月24日
    31
  • mysql用root登录

    mysql用root登录

    2022年4月3日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号