1.基本思路
(1)比较数组中两个相邻的元素。如果第一个比第二个大,则交换。
(2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,例如:第一个树和第二个树比较,第一个数大于第二个则交换,然后第二个和第三个比较,第二个大则交换…… 最终 将最大数移至最后。
(3)重复以上步骤,完成n-1次
2.时间复杂的
(1)最好情况:序列是升序排列,在这种情况下,需要进行的比较操作为(n-1)次。交换操作为0次。即O(n)
(2) 最坏情况:序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。交换操作数和比较操作数一样。即O(n^2)
(3)渐进时间复杂度(平均时间复杂度):O(n^2)
3.代码实现
1 namespace BubbleSortProgram 2 { 3 public class Program 4 { 5 static void Main(string[] args) 6 { 7 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 8 int[] arry = { 9,7,12,6,8,1}; 9 Console.WriteLine("-------------排序前--------------"); 10 for (int i = 0; i < arry.Length; i++) 11 { 12 Console.Write(arry[i]+" "); 13 } 14 BubbleSort(arry); 15 Console.WriteLine(" -------------排序后--------------"); 16 for (int i = 0; i < arry.Length; i++) 17 { 18 Console.Write(arry[i]+" "); 19 } 20 Console.ReadKey(); 21 } 22 23 /// <summary> 24 /// 冒泡排序 25 /// </summary> 26 /// <param name="arry"></param> 27 public static void BubbleSort(int[] arry) 28 { 29 if (arry.Length == 0 || arry == null) 30 return; 31 for (int i = 0; i < arry.Length - 1; i++) 32 { 33 for (int j = 0; j < arry.Length - i - 1; j++) 34 { 35 if (arry[j] > arry[j + 1]) 36 { 37 var temp = arry[j+1]; 38 arry[j + 1] = arry[j]; 39 arry[j] = temp; 40 } 41 } 42 } 43 } 44 } 45 }
运行结果: