首页 > 其他 > 详细

秒懂算法1——冒泡排序,及一种小改进(C#实现)

时间:2014-01-22 07:38:18      阅读:388      评论:0      收藏:0      [点我收藏+]

算法思路:

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

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

性质:

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

*注: 

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

代码:

bubuko.com,布布扣
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;
        }
bubuko.com,布布扣

改进:

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

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

bubuko.com,布布扣
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;
        }              
bubuko.com,布布扣

秒懂算法1——冒泡排序,及一种小改进(C#实现)

原文:http://www.cnblogs.com/hydor/p/3529152.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!