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

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

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

但是,在对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         }

 

posted @ 2015-03-15 18:08  叫我霍啊啊啊  阅读(448)  评论(0编辑  收藏  举报