下面是未经改进的冒泡排序算法:

#include

#include

int a[10] = {1,4,3,5,23,2,45,6,3,5};

main()

{

int

i,j,mid;

int

length = 10;

//开始外圈循环

for(i=0;i<=9;i++)

//外圈循环到i时,说明该数组的后i-1个数已经排好序并且是最大值

for(j=0;j<9-i;j++) //注意循环条件,因为存在a[j+1],所以j不能到达最后

{

if(a[j]>=a[j+1])

{

mid

= a[j];

a[j]

= a[j+1];

a[j+1]

= mid;

}

}

for(i=0;i<=9;i++)

printf("%d ",a[i]);

system("pause");

}

在这个冒泡排序算法中有一个缺陷,如果数组是 2 1 3 4 5 6

,那么在第一次外圈结束后,该数组就已经完成排序,但是程序还是会继续循环下去,做很多无用的比较,但是根本不会出现数的位置的交换。所以我们需要考虑一下冒泡排序的结束条件。

下面给出一个定义:如果冒泡排序在一次外圈的内圈循环中没有出现数的位置的交换,那么该数组排序完成,不需要向下进行。解释一下这个定义,内圈的循环是从0~length-i-1的,不出现交换说明在这个范围内后一个数都大于前一个数,而在length-i-1至lenth的范围中,本来就是符合条件的,所以定义成立。

所以我们添加一个flag标志,观察在每次外圈时是否出现数值的交换。

#include

#include

int a[10] =

{1,4,3,5,23,2,45,6,3,5};

main()

{

int i,j,mid;

int length = 10;

int flag = 1;

//标识符

for(i=0;i<=9&&flag;i++)

//注意判定条件

for(j=0;j<9-i;j++)

{

flag=0;  //每次外圈时初始化

if(a[j]>=a[j+1])

{

mid =

a[j];

a[j] =

a[j+1];

a[j+1] =

mid;

flag=1;

//如果有交换,那么可以进入下一圈循环

}

}

for(i=0;i<=9;i++)

printf("%d  ",a[i]);

system("pause");

}

本来冒泡排序就不是一个节省时间的排序算法,这样也算做了一点小更新吧..

c语言 冒泡排序算法,排序算法_冒泡排序改进(c语言实现)相关推荐

  1. C语言实现冒泡排序(bubble排序)算法(附完整源码)

    冒泡排序bubble排序算法 冒泡排序(bubble排序)算法的完整源码(定义,实现,main函数测试) 冒泡排序(bubble排序)算法的完整源码(定义,实现,main函数测试) #include ...

  2. 合并排序算法排序过程_基本算法:合并排序

    合并排序算法排序过程 每个程序员都需要了解他们的算法和数据结构. 在研究它们时,您需要确保确切了解它的功能,时间和空间的复杂性以及采用这种方式的原因,并且不仅能够对其进行编码,而且能够手动执行. 这就 ...

  3. 用c语言编写插入排序算法,C语言实现常用排序算法——插入排序

    插入排序是最基础的排序算法,原理: 首先1个元素肯定是有序的,所以插入排序从第二个元素开始遍历: 内循环首先请求一个空间保存待插入元素,从当前元素向数组起始位置反向遍历: 当发现有大于待插入元素的元素 ...

  4. c语言冒泡排序算法排序字符串,利用冒泡排序实现一串字符串从小到大的排序...

    实现B/S架构,输入一串字母或数字,将它们按从小到大排序,排序算法在服务端实现. 以下是实现: Test.java import java.io.IOException; import java.io ...

  5. C语言递归方式实现冒泡排序(bubble排序)算法(附完整源码)

    递归方式实现冒泡排序算法 递归方式实现冒泡排序算法的完整源码(定义,实现,main函数测试) 递归方式实现冒泡排序算法的完整源码(定义,实现,main函数测试) #include <assert ...

  6. python算法描述_数据结构(Python语言描述)- 排序算法

    目录 1.基本排序算法 1.1 选择排序 1.2 冒泡排序 1.3 插入排序 2. 更快排序算法 2.1 快速排序 2.2 归并排序(合并排序) 1.基本排序算法 计算机科学家设计了很多巧妙的策略对列 ...

  7. JavaScript 算法——排序算法之冒泡排序

    一.概念 冒泡排序(Bubble Sort):是一种简单的排序算法,可以把一系列的数据按照一定的顺序进行排列显示(从大到小或者从小到大).它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错 ...

  8. c语言排序算法实际案例,[C语言] 部分经典排序算法详解(有图解)

    目录 1.内容概括 2.主要算法 3.技术的具体应用 4.算法实际应用 5.总结 0.前言 在上一篇文章<[C语言] 数组的实际应用三则>中我们提到了数组的一些基础知识,并通过三个实际例子 ...

  9. c语言sort_C语言十大排序算法,让老师对你刮目相看的技巧

    排序算法作为数据结构的重要部分,系统地学习一下是很有必要的. 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时 ...

最新文章

  1. 文巾解题 372. 超级次方
  2. java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.LoopTag 错误
  3. 杂项题的基本解题思路——2、图片隐写术
  4. gateway集成sentinel实现网关限流
  5. 内蒙古广播电视大学计算机专修学院电话,内蒙古广播电视大学
  6. 跟燕十八学习PHP-第十九天-热身项目完善
  7. C#开发模式——单例模式
  8. 程序员在周末学习的8个实用技术
  9. 11.* 指针 引用
  10. c# mysql 连接串_c# – 如何形成一个正确的MySQL连接字符串?
  11. 华为交换机修改主机名
  12. 相片审核处理工具步骤_相片
  13. 非极大值抑制(Non-Maximum Suppression,NMS)
  14. 以二叉链表为存储结构, 试编写计算二叉树中叶子结点数目的递归算法.
  15. 使用GerberTools的Gerber Panelizer工具进行gerber文件拼板的方法
  16. testflight无法联网怎么办_Testflight不可用怎么办?
  17. 制作映射表并替换字符串中的内容
  18. 实用的shell脚本合集
  19. 山那边的panpan(序言)
  20. [日常] SinaMail项目和技术能力总结

热门文章

  1. 责任链模式(Chain of Responsibility Pattern)
  2. 智能化视频开发神器来了,AV Pipeline Kit 架构解析
  3. 乔布斯首份手写求职信再次被拍卖
  4. Go1.17 这个新特性竟是 6 年前提出来的
  5. “我在苹果商店下载了一个诈骗App,损失60万美金!”
  6. 工业物联网再起云涌,大咖共叙破圈之道
  7. 阿里云自研数据仓库 AnalyticDB 再捧 TPC 全球冠军
  8. 从 Flash 到 WEBGPU,Web 图形技经历过的变革你了解吗?
  9. 6 个步骤,搞定 AI 车牌识别器!(附详细分析)
  10. 针对金融级交易场景的严苛技术要求,如何修炼这门“必修课”?