前言
说实话今天给我触动的蛮大的,今天无意中看到一位同事在跟另一位同事交流,看到他们打开一个网站,然后嘀嘀咕咕的。出于好奇然后凑上去了解到原来是一位同事自己的开发了一个网站,网站的功能跟淘宝的一样,可以商家入驻,然后还可以与微信公众群进行相关联的一系列互动,了解到也是自己一个人做的。然后瞬间感觉自己好矮小,除了完成工作的上的一些任务,自己真没什么拿的出手的,所以我想完善自己的博客,将博客作为我的作品。好了,下面进入正题,今天分享的就是冒泡算法的三种方式。
最简单的排序实现
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 }
总结:自己对于算法这块还很欠缺,所以这段时间会看算法方面的书籍,以提升自己在写程序方面的效率。看完之后的我也会更新到博客上面,希望大家不吝赐教,感谢!
时间: 2024-11-01 21:09:39