排序算法-冒泡排序

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

列举数组包含元素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点咯,睡觉!!!

转载于:https://www.cnblogs.com/bigA/p/7342236.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值