• 排序一:冒泡排序的简单优化


    说明:很简答的优化,却有很多人容易在面试时候栽在这个简单的问题上。

    “冒泡排序”在面试中是很容易被问到的排序算法,也是最简单的排序算法,当被问到,“冒泡排序怎么优化?”,很多人就懵了,冒泡还能优化?答案是可以的。

    但是,在对50000个随机数进行测试中,发现,优化的冒泡和一般的冒泡在性能上几乎一样。

    于是又测试了25000有序25000无序的50000个随机数,优化的冒泡确实能快一些。

    //通俗冒泡     22216ms(随机) 14650ms(前半有序) 19977ms(后半有序)

    //优化冒泡     21238ms(随机) 11983ms(前半有序) 16607ms(后半有序)

    1. 这是一般的冒泡排序。

     1         /// <summary>
     2         /// 通俗冒泡
     3         /// </summary>
     4         public static void BubbleSortCommon(int[] arr)
     5         {
     6             int temp;
     7             int len = arr.Length - 1;
     8             for (int i = 0; i < len; i++)
     9             {
    10                 for (int j = 0; j < len - i; j++)
    11                 {
    12                     if (arr[j] > arr[j + 1])
    13                     {
    14                         temp = arr[j];
    15                         arr[j] = arr[j + 1];
    16                         arr[j + 1] = temp;
    17                     }
    18                 }
    19             }
    20         }

    2. 这是优化后的冒泡排序。仅仅加了一个标识,相对于通俗的冒泡排序,却能更好地处理已经排好序或者几乎排好序的数组,避免做无用功。

     1         /// <summary>
     2         /// 优化冒泡
     3         /// </summary>
     4         public static void BubbleSortOptimize(int[] arr)
     5         {
     6             int flag = 0;
     7             int len=arr.Length-1;
     8             int temp;
     9             while (flag == 0)
    10             {
    11                 flag = 1;
    12                 for (int i = 0; i < len; i++)
    13                 {
    14                     if (arr[i] > arr[i + 1])
    15                     {
    16                         temp = arr[i];
    17                         arr[i] = arr[i + 1];
    18                         arr[i + 1] = temp;
    19                         flag = 0;
    20                     }
    21                 }
    22                 len--;
    23             }
    24         }
  • 相关阅读:
    Android 视图切换库的使用
    Ext3.4--TreeGridDemo
    Extjs不错的博客
    Extjs学习笔记--(六,选择器)
    Webservice简单案例
    Extjs学习笔记--(五,事件)
    Extjs学习笔记--(四,基本函数介绍)
    Extjs学习笔记--(三,调试技巧)
    SQL集合运算:差集、交集、并集
    Extjs学习笔记--(二)
  • 原文地址:https://www.cnblogs.com/HuoAA/p/4340143.html
Copyright © 2020-2023  润新知