博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
秒懂算法1——冒泡排序,及一种小改进(C#实现)
阅读量:5287 次
发布时间:2019-06-14

本文共 1346 字,大约阅读时间需要 4 分钟。

算法思路:

重复走访每两个相邻元素,比较大小交换位置,直至排序完成。

有兴趣电话可以看一下这个的视频,很形象的演示了排序过程,额呵呵~~

性质:

冒泡排序是一种原地排序(只有常数个元素存到数组以外的空间),最坏的时间复杂度,和平均时间复杂度都是n2。冒泡法是。。

*注: 

冒泡排序是算法入门级别,是面试笔试时候的禁术,古往今来死在冒泡法上的应届生真可谓前仆后继...

代码:

int[] BubbleSort1(int[] a)        {            int num;             for (int i = a.Length-1; i>0; i--) //外层循环,每一轮把最大的元素换到最后,下一轮少排一个元素                 {                     for (int j = 0; j < i; j++)                      {                         if (a[j] > a[j + 1])                         { num = a[j]; a[j] = a[j + 1]; a[j + 1] = num; }                     }                 }            return a;        }

改进:

因为冒泡法会机械而重复的完成所有比较,比如对{10,1,2,3,4,5,6}这个数组的排序,实际上第一轮过后,就已经排好了,但程序还是把没有意义的比较进行到底。。。

于是可以加一个开关变量,在某一轮没有发生交换的情况下,结束排序,如下:

int[] BubbleSort2(int[] a)        {            int num;             for (int i = a.Length-1; i>0; i--)                 {                     bool isOver=true;                     for (int j = 0; j < i; j++)                      {                         if (a[j] > a[j + 1])                         {                                num = a[j]; a[j] = a[j + 1]; a[j + 1] = num;                                 isOver = false ;                         }                     }                     if (isOver) break;    //没有发生交换则结束                 }            return a;        }

 

 

 

转载于:https://www.cnblogs.com/hydor/p/3529152.html

你可能感兴趣的文章
bashrc 文件命令
查看>>
hdu4271 Find Black Hand 2012长春网络赛E题 最短编辑距离
查看>>
V7000初始化
查看>>
animate.css的使用
查看>>
Struts2 注释类型
查看>>
JSP中EL表达式语言不能使用的解决方法
查看>>
做XH2.54杜邦线材料-导线
查看>>
如何刻录cd音乐
查看>>
Codeforces Round #318(Div 1) 573A, 573B,573C
查看>>
51Nod 1091 线段重叠 贪心 区间重叠
查看>>
[翻译] NimbusKit
查看>>
POJ 2196
查看>>
熟悉下 mysql 的数据库导入导出
查看>>
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例(转)
查看>>
Machine Learning for hackers读书笔记(七)优化:密码破译
查看>>
Python基础第24天
查看>>
使用NPOI 做Excel导出
查看>>
L0/L1/L2范数(转载)
查看>>
[deviceone开发]-数据绑定示例
查看>>
CSU - 1770 按钮控制彩灯实验
查看>>