Bubble sorting is one of the simple sorting algorithms. By comparing two adjacent elements, when the first element is larger than the second element, the first element is moved back (ascending, similarly, descending). After each sorting, there must be a maximum or minimum value at the end.
First bubble sort
1 static void BubbleSort<T>(T[] arr)where T : IComparable<T> 2 { 3 //Determine the number of times to sort 4 for(int i = 0; i < arr.Length; i++) 5 { 6 //Every time the platoon is reduced I Elements, I After sorting 7 for(int j=0;j<arr.Length-i-1;j++) 8 { 9 if(arr[j].CompareTo(arr[j+1])>0) 10 { 11 //Exchange algorithm 12 var temp = arr[j]; 13 arr[j] = arr[j + 1]; 14 arr[j + 1] = temp; 15 } 16 17 } 18 Print(arr); 19 } 20 }
This kind of bubbling sorting can be further optimized, because after sorting, it is still sorting. So you can define a variable in the outer layer to indicate whether it is sorted or not. Here, use the bool value.
1 static void BubbleSort<T>(T[] arr) where T : IComparable<T> 2 { 3 //Determine the number of times to sort 4 for (int i = 0; i < arr.Length; i++) 5 { 6 //Define a to determine if sorting is in progress 7 var Sorting = false; 8 //Every time the platoon is reduced I Elements, I After sorting 9 for (int j = 0; j < arr.Length - i - 1; j++) 10 { 11 if (arr[j].CompareTo(arr[j + 1]) > 0) 12 { 13 //Exchange algorithm 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 return; 24 } 25 Print(arr); 26 } 27 }
There is a third optimization method for bubble sorting. After sorting, when the sorting is finished, there is no need to continue the comparison.
1 static void BubbleSort<T>(T[] arr)where T : IComparable<T> 2 { 3 //Record the last swap location 4 int lastExChangeIndex = 0; 5 //The boundary of an unordered sequence stops every time it is compared here 6 int sortBorder = arr.Length - 1; 7 //Decide how many times to go 8 for(int i=0;i<arr.Length;i++) 9 { 10 var Sorting = false; 11 //Determine the number of comparisons. After each sorting, there must be the largest one at the back, so every time you go-i 12 for (int j=0;j< sortBorder; j++) 13 { 14 if(arr[j].CompareTo(arr[j+1])>0) 15 { 16 //Exchange algorithm 17 var temp = arr[j]; 18 arr[j] = arr[j + 1]; 19 arr[j + 1] = temp; 20 //Sorting 21 Sorting=true; 22 //Update the boundary of the disordered sequence to the position of the last exchange element 23 lastExChangeIndex = j; 24 } 25 } 26 sortBorder = lastExChangeIndex; 27 //Exit if sorting is complete 28 if(Sorting==false) 29 { 30 return; 31 } 32 Print(arr); 33 } 34 }