首页 > 代码库 > 冒泡有三种方式你知道吗?

冒泡有三种方式你知道吗?

   前言

     说实话今天给我触动的蛮大的,今天无意中看到一位同事在跟另一位同事交流,看到他们打开一个网站,然后嘀嘀咕咕的。出于好奇然后凑上去了解到原来是一位同事自己的开发了一个网站,网站的功能跟淘宝的一样,可以商家入驻,然后还可以与微信公众群进行相关联的一系列互动,了解到也是自己一个人做的。然后瞬间感觉自己好矮小,除了完成工作的上的一些任务,自己真没什么拿的出手的,所以我想完善自己的博客,将博客作为我的作品。好了,下面进入正题,今天分享的就是冒泡算法的三种方式。

   最简单的排序实现

      

 1    public static IList<T> BubbleSort<T>(IList<T> arr) where T : IComparable<T> 2         { 3             int length = arr.Count(); 4             for (int i = 0; i < length; i++) 5             { 6                 for (int j = i + 1; j < length; j++) 7                 { 8                     if (arr[i].CompareTo(arr[j]) > 0) 9                     {10                         var temp = arr[i];11                         arr[i] = arr[j];12                         arr[j] = temp;13                     }14                 }15             }16             return arr;17         }

     这上面严格意义上说,并不算冒泡算法。因为不能满足“两两比较的思想”,只能算是最最简单的交换排序。

     真正意义的冒泡排序

 1    public static IList<T> BubbleSort<T>(IList<T> arr) where T : IComparable<T> 2         { 3             int lenght = arr.Count(); 4             for (int i = 0; i < lenght; i++) 5             { 6                 for (int j = lenght - 1; j > i; j--) 7                 { 8                     if (arr[j - 1].CompareTo(arr[j]) > 0) 9                     {10                         var temp = arr[j - 1];11                         arr[j - 1] = arr[j];12                         arr[j] = temp;13                     }14                 }15             }16             return arr;17         }

     上面的冒泡可以看出,当数组已经排序好了,但是依然循环排序,所以可以对此可以做出优化新增标志位flag来判断

    优化的冒泡

 1   public static IList<T> BubbleSort<T>(IList<T> arr) where T : IComparable<T> 2         { 3             int lenght = arr.Count(); 4             bool flag = false; 5             for (int i = 0; i < lenght; i++) 6             { 7                 flag = true; 8                 for (int j = lenght - 1; j > i; j--) 9                 {10                     if (arr[j - 1].CompareTo(arr[j]) > 0)11                     {12                         var temp = arr[j - 1];13                         arr[j - 1] = arr[j];14                         arr[j] = temp;15                         flag = false;16                     }17                 }18                 if (flag)19                     break;20             }21             return arr;22         }

   总结:自己对于算法这块还很欠缺,所以这段时间会看算法方面的书籍,以提升自己在写程序方面的效率。看完之后的我也会更新到博客上面,希望大家不吝赐教,感谢!

冒泡有三种方式你知道吗?