分两种方式开始,其实际是一样的,都是把大的或者小的往另一侧推(为什么叫冒泡排序?)

列举数组包含元素n+1个(最后一个下表就是n了,这个应该都知道的)----------注意这里数组有n+1个元素

一从数组头开始比较

  排序开始(从小到大排序)       第一轮

  1. 0位与第1位比较,如果第0位大于第1位,则交换它们的位子,否则不处理(保证第1位大于第0位)
  2. 1位与第2位比较,如果第1位大于第2位,则交换它们的位子,否则不处理(保证第2位大于第1位)
  3. ...
  4. n位与第n+1位比较,如果第n位大于第n+1位,则交换它们的位子,否则不处理(保证第n+1位大于第n位)

  这算进过一轮比较,将最大的一位移动到了最后一位,第二轮比较就不考虑最后一个了      第二轮

  1. 第0位与第1位比较,如果第0位大于第1位,则交换它们的位子,否则不处理(保证第1位大于第0位)
  2. 第1位与第2位比较,如果第1位大于第2位,则交换它们的位子,否则不处理(保证第2位大于第1位)
  3. ...
  4. n-1位与第n位比较,如果第n-1位大于第n位,则交换它们的位子,否则不处理(保证第n位大于第n-1位)

  总共需要 n轮才能比较完

二从数组尾开始

  略

 

代码如下:

 1      public static void BubbleSort(int[] array)
 2         {
 3             //外部循环控制要循环几轮
 4             for (int i = 0; i < array.Length-1; i++)
 5             {
 6                 //每次都从0位与第1位比较开始,不处理上一轮的最后一位,所以这里有个-i,因为下面比较j++,所以j不能为数组最后一位
 7                 for (int j = 0; j < array.Length-1-i; j++)
 8                 {
 9                     //这里说明把大的数往后面推,使得数组从小到大排序;改为<则将小的数往后推,使得数组从大到小排序
10                     if (array[j] > array[j+1])
11                     {
12                         int c = array[j];
13                         array[j] = array[j + 1];
14                         array[j + 1] = c;
15                     }
16                 }
17             }
18         }

 

 

我在网上还看到一种错误的代码:

 1        public static void BubbleSort(int[] array)
 2         {
 3             for (int i = 0; i < array.Length - 1; i++)
 4             {
 5                 //注意这里内循环处理不同
 6                 for (int j = i + 1; j < array.Length; j++)
 7                 {
 8                     int c = array[i];
 9                     //这里是i位与j位比较
10                     if (array[i] > array[j])
11                     {
12                         array[i] = array[j];
13                         array[j] = c;
14                     }
15                 }
16             }
17         }

 

1这个可以实现排序(排序功能没问题)

2这不是冒泡排序

3这是选择排序的思想,选择排序下次来写了  -_- 

 

总结

基本的冒泡排序就这样了,但是有比较明显的问题

如:数组元素: 9,1,2,3,4,5

这个数组在第一轮排序后变成 1,2,3,4,5,9    也就是变得有序了

但是冒泡排序还是会接着比较,发现问题,,,,那就优化它咯,不过是下次了,12点咯,睡觉!!!

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!