zoukankan      html  css  js  c++  java
  • 秒懂算法1——冒泡排序,及一种小改进(C#实现)

    算法思路:

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

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

    性质:

    冒泡排序是一种原地排序(只有常数个元素存到数组以外的空间),最坏的时间复杂度,和平均时间复杂度都是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;
            }              
  • 相关阅读:
    document对象补充
    JavaScript(DOM操作)(Window.document对象)
    DOM、Window操作
    JavaScript基础
    格式布局
    洛谷P2756 飞行员配对方案问题
    洛谷P2526 【SHOI2001】小狗散步
    洛谷P1129 【ZJOI2007】矩阵游戏
    洛谷P1640 【SCOI2010】连续攻击游戏
    二分图
  • 原文地址:https://www.cnblogs.com/hydor/p/3529152.html
Copyright © 2011-2022 走看看