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;
            }              
  • 相关阅读:
    DataTable转换成IList<T>的简单实现
    websocket
    获取用户使用设备信息
    判断对象是否相等
    关于PC适配
    树形数据结构实现平铺展示
    埋点
    多层表单验证
    表格行拖动,数据中状态值不同的禁止拖拽
    element tree 深度查询
  • 原文地址:https://www.cnblogs.com/hydor/p/3529152.html
Copyright © 2011-2022 走看看