zoukankan      html  css  js  c++  java
  • 排序一:冒泡排序的简单优化

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

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

    但是,在对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         }
  • 相关阅读:
    网络编程之Tcp,udp
    网络编程简介
    面向对象之高级篇 反射,元类
    面向对象 高级篇
    面向对象,继承
    初识面向对象
    包 hashlib,logging
    模块
    Dango生命周期回顾与forms组件
    Django中auth登录、注册、修改密码、退出、ORM自关联
  • 原文地址:https://www.cnblogs.com/HuoAA/p/4340143.html
Copyright © 2011-2022 走看看