排序算法--------冒泡排序
冒泡排序是是简单排序算法之一,通过比较相邻两个元素,当第一个元素比第二个元素大的时候就把第一个元素往后移(升序,同理可以达成降序),每趟排序后,必定有一个最大或者最小值在最后。
第一种冒泡排序
1 static void BubbleSort<T>(T[] arr)where T : IComparable<T> 2 { 3 //决定排序的趟数 4 for(int i = 0; i < arr.Length; i++) 5 { 6 //每当排过一次减少I个元素,I后以排序完 7 for(int j=0;j<arr.Length-i-1;j++) 8 { 9 if(arr[j].CompareTo(arr[j+1])>0) 10 { 11 //交换算法 12 var temp = arr[j]; 13 arr[j] = arr[j + 1]; 14 arr[j + 1] = temp; 15 } 16 17 } 18 Print(arr); 19 } 20 }
这种冒泡排序,能够进行进一步优化,因为排序完成后,还在排序。所以能够在外层定义一个变量来表示其是否排序,这里用bool值
1 static void BubbleSort<T>(T[] arr) where T : IComparable<T> 2 { 3 //决定排序的趟数 4 for (int i = 0; i < arr.Length; i++) 5 { 6 //定义一个用来确定是否正在排序 7 var Sorting = false; 8 //每当排过一次减少I个元素,I后以排序完 9 for (int j = 0; j < arr.Length - i - 1; j++) 10 { 11 if (arr[j].CompareTo(arr[j + 1]) > 0) 12 { 13 //交换算法 14 var temp = arr[j]; 15 arr[j] = arr[j + 1]; 16 arr[j + 1] = temp; 17 Sorting = true; 18 } 19 20 } 21 if(Sorting==false) 22 { 23 break; 24 } 25 Print(arr); 26 } 27 }
冒泡排序还有第三种优化方法,排序完后,当后方已经排序完成后,不需要再继续进行比较.
1 static void BubbleSort<T>(T[] arr)where T : IComparable<T> 2 { 3 //记录最后一次的交换位置 4 int lastExChangeIndex = 0; 5 //无序数列的边界,每次比较到这里就停止 6 int sortBorder = arr.Length - 1; 7 //决定走过的趟数 8 for(int i=0;i<arr.Length;i++) 9 { 10 var Sorting = false; 11 //决定比较的次数,每次排序后 必定有一个最大的在最后面 所以每走一趟-i 12 for (int j=0;j< sortBorder; j++) 13 { 14 if(arr[j].CompareTo(arr[j+1])>0) 15 { 16 //交换算法 17 var temp = arr[j]; 18 arr[j] = arr[j + 1]; 19 arr[j + 1] = temp; 20 //排序中 21 Sorting=true; 22 //把无序数列的边界更新为最后一次交换元素的位置 23 lastExChangeIndex = j; 24 } 25 } 26 sortBorder = lastExChangeIndex; 27 //如果排序已完成就退出 28 if(Sorting==false) 29 { 30 break; 31 } 32 Print(arr); 33 } 34 }

浙公网安备 33010602011771号