冒泡排序

冒泡排序基本思想

依次比较相邻的两个元素(从前往后,或者从后往前都可以),将两个元素中小的元素放在前面,就如同水中的气泡一样,会慢慢浮到水面上来,数组中小的元素通过几个循环之后也会逐渐“浮”到数组的前面。

假定无序数组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     }

 

 

 

posted @ 2013-08-03 22:55  年轻的young  阅读(210)  评论(0)    收藏  举报