首页 > 代码库 > 冒泡有三种方式你知道吗?
冒泡有三种方式你知道吗?
前言
说实话今天给我触动的蛮大的,今天无意中看到一位同事在跟另一位同事交流,看到他们打开一个网站,然后嘀嘀咕咕的。出于好奇然后凑上去了解到原来是一位同事自己的开发了一个网站,网站的功能跟淘宝的一样,可以商家入驻,然后还可以与微信公众群进行相关联的一系列互动,了解到也是自己一个人做的。然后瞬间感觉自己好矮小,除了完成工作的上的一些任务,自己真没什么拿的出手的,所以我想完善自己的博客,将博客作为我的作品。好了,下面进入正题,今天分享的就是冒泡算法的三种方式。
最简单的排序实现
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 }
总结:自己对于算法这块还很欠缺,所以这段时间会看算法方面的书籍,以提升自己在写程序方面的效率。看完之后的我也会更新到博客上面,希望大家不吝赐教,感谢!
冒泡有三种方式你知道吗?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。