1.如何理解

 冒泡,想象一下水底有个气泡慢慢爬升的过程。编程基础——排序(冒泡) 随笔 第1张

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

现在有一个数组,编写一段代码使数组中数据按照降序排序。

现假设数组为arrary=[1,2,3,5,4],则排序过程如下图:

编程基础——排序(冒泡) 随笔 第2张

黑色部分就像气泡一样上升。

2. 排序

冒泡排序是一趟的过程就是两两比较,并按规则交换数据。规则(大的放后面或小的放后面)。如下,因为是降序,所以是小的放后面

编程基础——排序(冒泡) 随笔 第3张

第一趟排序有五个数据(Count = 5),第一次排序是第1位和第2位的数据进行比较并根据规则交换数据。
                                                      ,第二次排序是第2位和第3位的数据进行比较并根据规则交换数据。
                                                      ,第三次排序是第3位和第4位的数据进行比较并根据规则交换数据。
                                                      ,第四次排序是第4位和第5位的数据进行比较并根据规则交换数据。

所以当前趟总比较次数为当前趟需比较的数据个数-1 ,即: (Count-1)

(一趟比较的每次比较,是两两进行比较所以单趟比较次数为Count-1);

单趟执行代码如下:

 1 int temp = -1;
 2 for(int j = 0; j < count - 1 ; j ++)
 3 {
 4     if(arrary[j] > arrary[j + 1])
 5     {
 6         temp = arrary[j];
 7         arrary[j] = arrary[j + 1];
 8         arrary[j + 1] = temp;
 9     }
10 }

每趟比较都是两两进行比较,而下一趟比较总是比前一趟少一个数据。所以总趟数为总数据数-1

所以完整执行代码为

 1 var arrary = new int[5]{1,2,3,5,4};
 2 int temp = -1;
 3 int count = 0;
 4 for(int i = 0; i < arrary.Length - 1; i++)
 5 {
 6     count = arrary.Length - i;
 7     for(int j = 0; j < count - 1 ; j ++)
 8     {
 9         if(arrary[j] > arrary[j + 1])
10         {
11             temp = arrary[j];
12             arrary[j] = arrary[j + 1];
13             arrary[j + 1] = temp;
14         }
15     }
16 }

 分割线

 分割线上代码为上浮冒泡

 1 // 下浮冒泡(降序)
 2 var arrary = new int[5]{1,2,3,5,4};
 3 int temp = -1;
 4 int count = 0;
 5 for(int i = 0; i < arrary.Length - 1; i++)
 6 {
 7     count = arrary.Length - i;
 8     for(int j = count; j > 0; j --)
 9     {
10         if(arrary[j] < arrary[j - 1])
11         {
12             temp = arrary[j];
13             arrary[j] = arrary[j - 1];
14             arrary[j - 1] = temp;
15         }
16     }
17 }

 冒泡排序的复杂度问题:参照 https://www.cnblogs.com/shen-hua/p/5422676.html

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄