冒泡排序
冒泡排序基本思想
依次比较相邻的两个元素(从前往后,或者从后往前都可以),将两个元素中小的元素放在前面,就如同水中的气泡一样,会慢慢浮到水面上来,数组中小的元素通过几个循环之后也会逐渐“浮”到数组的前面。
假定无序数组R[1...n],先对R[n-1]和R[n]进行比较,如果R[n-1]小于等于R[n],则不进行元素互换,进行下一次比较(比较R[n-2]和R[n-1])。若R[n-1]大于R[n],则2个元素互换,然后进行下一次比较。
直到比较完R[0]和R[1]之后,第一轮比较结束(即完成一次外循环),数组中最小的元素被排在第一个位置。然后进入第二轮循环,重复以上步骤,直到比较完R[1]和R[2]之后,第二轮循环结束,数组中第二小的元素被放置到R[1]的位置。
以此类推,数组中较小的元素会依次"浮"到数组的前面来,然后完成排序。
为了提高效率,我在下面的代码中添加了一个flag,初始化为false,若在一轮比较中,发生了元素的互换,则将flag设置为true,说明还需要进行下一轮比较。若一轮比较中没有发生元素的互换,则说明当前数组已经排好序,不再需要进行后续的比较。
C#代码:
1 public class SortMath 2 { 3 public static void BubbleSort<T>(T[] array) where T : IComparable 4 { 5 for (int left = 0; left < array.Length; left++) 6 { 7 bool flag = false; 8 for (int right = array.Length - 1; right > left; right--) 9 { 10 if (array[right].CompareTo(array[right - 1]) < 0) 11 { 12 T temp = array[right]; 13 array[right] = array[right - 1]; 14 array[right - 1] = temp; 15 flag = true; 16 } 17 } 18 if (!flag) 19 return; 20 } 21 } 22 }

浙公网安备 33010602011771号