原理

将相邻的数据两两进行比较,按照从小到大或者从大到小的顺序进行位置交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后从头开始再次进行两两比较交换,直到倒数第二位时结束。按照此规则,若干趟数据便按照了从小到大或者从大到小完成了排序。

例子

将数组[3,6,4,2,5,1]进行从大到小排序

第一趟排序

第一次两两比较,3<6 交换

交换前:| 3 | 6 | 4 | 2 | 5 | 1 |

交换后:| 6 | 3 | 4 | 2 | 5 | 1 |

第二次两两比较,3<4 交换

交换前:| 6 | 3 | 4 | 2 | 5 | 1 |

交换后:| 6 | 4 | 3 | 2 | 5 | 1 |

第三次两两比较,3>2 不交换

交换前:| 6 | 4 | 3 | 2 | 5 | 1 |

交换后:| 6 | 4 | 3 | 2 | 5 | 1 |

第四次两两比较,2<5交换

交换前:| 6 | 4 | 3 | 2 | 5 | 1 |

交换后:| 6 | 4 | 3 | 5 | 2 | 1 |

第五次两两比较,2>1不交换

交换前:| 6 | 4 | 3 | 2 | 2 | 1 |

交换后:| 6 | 4 | 3 | 5 | 2 | 1 |

第二趟排序

第一次两两比较,6>4不交换

交换前:| 6 | 4 | 3 | 5 | 2 | 1 |

交换后:| 6 | 4 | 3 | 5 | 2 | 1 |

第二次两两比较,4>3不交换

交换前:| 6 | 4 | 3 | 5 | 2 | 1 |

交换后:| 6 | 4 | 3 | 5 | 2 | 1 |

第二次两两比较,3<5交换

交换前:| 6 | 4 | 3 | 5 | 2 | 1 |

交换后:| 6 | 4 | 5 | 3 | 2 | 1 |

第三次两两比较,3>2不交换

交换前:| 6 | 4 | 5 | 3 | 2 | 1 |

交换后:| 6 | 4 | 5 | 3 | 2 | 1 |

第三趟排序

第一次两两比较,6>4不交换

交换前:| 6 | 4 | 5 | 3 | 2 | 1 |

交换后:| 6 | 4 | 5 | 3 | 2 | 1 |

第二次两两比较,4<5交换

交换前:| 6 | 4 | 5 | 3 | 2 | 1 |

交换后:| 6 | 5 | 4 | 3 | 2 | 1 |

第三次两两比较,4>3不交换

交换前:| 6 | 5 | 4 | 3 | 2 | 1 |

交换后:| 6 | 5 | 4 | 3 | 2 | 1 |

第四趟排序无交换

第五趟排序无交换

至此,排序完毕,输出最终结果6 5 4 3 2 1

动画演示

代码参考

        static void Main(string[] args)
{
int[] intArray = { , , , , , };
Bubble_Sort(intArray); foreach (var item in intArray)
{
Console.WriteLine(item);
}
Console.ReadLine();
} static void Bubble_Sort(int[] unsorted)
{
int temp;
for (int i = ; i < unsorted.Length - 1; i++)
{
for (int j = ; j < unsorted.Length - 1 - i; j++)
{
if (unsorted[j] < unsorted[j + 1])
{
temp = unsorted[j];
unsorted[j] = unsorted[j + 1];
unsorted[j + 1] = temp;
}
}
}
}

算法优化

假如一个数组进行很少趟就能排成有序数组,那么运行上面的代码就有点浪费了。对算法进行优化,详情请看一下代码

     static void Bubble_Sort(int[] unsorted)
{
int temp;
bool flag; //新增标志位
for (int i = ; i < unsorted.Length - 1; i++)
{
flag = false;
for (int j = ; j < unsorted.Length - 1 - i; j++)
{
if (unsorted[j] < unsorted[j + 1])
{
temp = unsorted[j];
unsorted[j] = unsorted[j + 1];
unsorted[j + 1] = temp;
flag = true; //发生交换,则标志位改变
}
} //数据未发生1次交换,标志位不变,表示数组已为有序装态,可提前结束外层循环
if (!flag)
{
break;
}
}
}

参考资料

http://www.blogjava.net/todayx-org/archive/2012/01/08/368091.html

基础算法之冒泡排序Bubble Sort的更多相关文章

  1. Java中的经典算法之冒泡排序(Bubble Sort)

    Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...

  2. java排序算法之冒泡排序(Bubble Sort)

    java排序算法之冒泡排序(Bubble Sort) 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数 ...

  3. 【排序算法】冒泡排序(Bubble Sort)

    0. 说明 参考 维基百科中的冒泡排序 冒泡排序 (Bubble Sort) 是与插入排序拥有相等的执行时间,但是两种算法在需要的交换次数却很大地不同. 在最坏的情况,冒泡排序需要 O(n2)  次交 ...

  4. 快速排序算法回顾 --冒泡排序Bubble Sort和快速排序Quick Sort(Python实现)

    冒泡排序的过程是首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字.以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止 ...

  5. c#经典算法之冒泡排序(Bubble Sort)

    转载于:https://www.cnblogs.com/shen-hua/p/5422676.html 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面, ...

  6. 分享知识-快乐自己:Java中的经典算法之冒泡排序(Bubble Sort)

    原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将 ...

  7. 排序算法--冒泡排序(Bubble Sort)_C#程序实现

    排序算法--冒泡排序(Bubble Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来非常困 ...

  8. 冒泡排序(Bubble Sort),比较次数优化改进

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  9. [算法] 冒泡排序 Bubble Sort

    冒泡排序(Bubble Sort,台湾另外一种译名为:泡沫排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没 ...

随机推荐

  1. 总结/PSP初体验—排球计分程序1.0

    要做一个排球计分程序,墨迹了很长时间才做出个的东西,过程很不爽: 功能:这个软件有两个页面,可以实现窗体A的部分变化控制窗体B的部分变化.A是操作人员使用看到的,B是投放给观众的,完全由A操控: 学到 ...

  2. php截取中文字符串乱码问题

    一般情况下说到截取字符串我们都会想到substr 然而substr对英文字符串有不错的效果,但是中文可能就会报出各种各样的问题: 所以,我们要采用mb库里面的substr,也就是mb_substr() ...

  3. 将windows server 2016改造为像windows 10一样适合个人使用的系统

    Windows server 2016 RTM已流出,具体可以搜索wzor大神泄露的,英文版本是0911的.现根据我安装后整理的如何配置使个人更适合使用. 20170102更新:wzor泄漏的0911 ...

  4. HTML5 History 模式

    vue-router 默认 hash 模式 -- 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载. 如果不想要很丑的 hash,我们可以用路由的 his ...

  5. [LeetCode_3] Longest Substring Without Repeating Characters

    LeetCode: 3. Longest Substring Without Repeating Characters class Solution { public: int lengthOfLon ...

  6. Intellij IDEA 配置最简单的maven-struts2环境的web项目

    在idea里搭建maven项目 看着网上大神发的各种博客,然后自己搭建出来一个最简单的maven-strtus2项目,供初学者学习 新建project

  7. python 学习笔记十九 django深入学习四 cookie,session

    缓存 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求一个页面,Web服务器将进行所有涵盖数据库查询到模版渲染到业务逻辑的请求,用来创建浏览者需要的页面.当程序访问量大时,耗时必然会更加明显, ...

  8. 创建EF数据模型

    最后的应用程序,看上去就像下边这样: 创建数据模型,你将从以下三个类开始: 在Models文件夹,新建以下类: using System; using System.Collections.Gener ...

  9. Solr搭建大数据查询平台

    参考文章:http://www.freebuf.com/articles/database/100423.html 对上面链接的补充: solr-5.5.0版本已被删除,新url:http://mir ...

  10. 新一代Ajax API --fetch

    之前 师傅跟我提过 一个新的Ajax API  fetch 今天看到一篇关于fetch的文章,受益匪浅. XMLHttpRequest并不是专为Ajax而设计的,虽然各种框架对XHR的封装已经足够好用 ...