小白学算法2.1——冒泡排序

原创 2015年11月21日 18:23:45

小白学算法2.1——冒泡排序

标签: 小白学算法


小白学算法2.x全部为排序算法
本节所有排序算法按照从小到大排序

1.冒泡排序算法

排序就是将一组对象按照某种逻辑顺序重新排列的过程

排序现象很普遍,比如高考成绩的全省排名。好的排序不仅能够在极短的时间内完成任务,而且空间消耗也非常的小,比如位排序。由于现在内存的限制并不像以前那么苛刻了,甚至有时候会消耗空间来节省时间,所以排序算法常常用时间复杂度来衡量。

冒泡排序属于初级排序,时间复杂度为O(n2)。冒泡排序之所以叫冒泡排序,是因为每经过一次排序,本次排序中最大的一个数就被移动到最右端去了。整个排序的过程中就是最大的数不断地被移动到最右端,恰似一个个气泡浮出水面一般。

冒泡排序每次比较两个数,如果前一个数比后一个数大,则交换两个数的位置,假设待排序的数列为{5, 7, 1, 4, 2},冒泡排序的流程如下:

  • 黄色表示本次比较的两个数,红色表示已经冒出到水面的“气泡”
  • i表示排序的次数,j表示某次排序比较的两个数

2.冒泡排序实现

假设一共有n个数需要排序,那么一共需要排序n-1次,第i次排序比较n-1-i次。

  • 每次排序都会将最大的数“浮出水面”,n个数浮出n-1个数后,最后一个数必然是最小的,故只需要n-1次排序
  • n个数两两依次做比较,需要n-1次比较;每“浮出”一个数,待排序的数就少一个,所以第i次排序比较n-1-i
void bubbleSort(int* A, int n) 
{
    for (int i=0; i<n-1; i++)//排n-1次
    {
        for (int j=0; j<n-i-1; j++)//第i次做n-1-i对比较
        {
            if(A[j] > A[j+1])
            {
                int swap = A[j];
                A[j] = A[j+1];
                A[j+1] = swap;
            }
        }
    }
}

3.总结

  • 冒泡排序其实还可以改进一下,添加一个bool型flag变量,每次排序前置为false,如果在该次排序中发生了数值位置交互,那么把flag置为true,在每次排序的结尾检测flag,如果为false则跳出排序循环。因为很可能在某次排序中整个数列就已经有序化了(如上例在i=2时就已经排序完毕),有序化数列中没有倒置对,故就没有交换了,故可跳出循环
  • 冒泡排序是稳定排序,即当主键相等时,有序化后的数列主键相等的元素相对位置并没有改变
  • 冒泡排序属于初级排序,时间复杂度为O(n2),当数据量较大时,建议采用高级排序
版权声明:本文为博主原创文章,未经博主允许不得转载。

【数据结构】——排序算法——2.1、冒泡排序

【数据结构】——排序算法——2.1、冒泡排序 一、先上维基的图:
  • waycaiqi
  • waycaiqi
  • 2015年03月22日 19:34
  • 712

冒泡排序由浅入深详细分析图解

冒泡排序 * 相邻元素两两比较,大的往后放,第一次完毕后,最大值就出现在 * 最大索引处,同理,继续,即可得到一个排序好的数组 * * 规律: * 1、两两比较,大的往后放。 ...
  • starjuly
  • starjuly
  • 2016年12月25日 19:49
  • 3501

java中冒泡排序,根据对象的属性,排对象

主程序排序: public class TestDmo { public static void main(String[] args) { List list=getData(); ...
  • zhaihaohao1
  • zhaihaohao1
  • 2017年06月26日 09:05
  • 183

冒泡排序的2种写法

假如有几个数字int score[] = {67, 69, 75, 88};  按照从大到小排序。 有2种思路,第一种,score[j] 和 score[j+1] 比较 如果 前者比后者小,把前者和...
  • shuaizai88
  • shuaizai88
  • 2017年06月14日 17:52
  • 2099

java将list集合冒泡排序

java将List集合进行冒泡排序。。。
  • xiaosheng_papa
  • xiaosheng_papa
  • 2015年01月05日 13:55
  • 4175

OC的冒泡排序

#import int main(int argc, const char * argv[]) { @autoreleasepool { /* 冒泡...
  • qq331429844
  • qq331429844
  • 2015年10月13日 21:04
  • 6577

【原创】增强版冒泡排序算法-java版

第N趟循环,如果已经没有移动元素的操作,说明排序已完成,循环应该退出,不必再执行后续的循环操作,因为就算比较也不会再有元素会被移动。增加此控制计数器。控制循环退出。...
  • li396864285
  • li396864285
  • 2016年06月13日 17:39
  • 566

例子说冒泡排序

1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3. 针对所有的元素重复以上...
  • u010927640
  • u010927640
  • 2016年03月31日 20:04
  • 4402

冒泡排序算法详解C++程序

冒泡排序算法:(Bubble Sort)首先肯定是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。 用C++实现冒泡算法...
  • rl529014
  • rl529014
  • 2015年10月19日 21:19
  • 2450

冒泡排序的基本思想

冒泡法排序是很常用的排序方法,文中给出了详细的讲解,并给出了VB的代码!...
  • doublelions
  • doublelions
  • 2011年05月07日 23:30
  • 4323
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:小白学算法2.1——冒泡排序
举报原因:
原因补充:

(最多只允许输入30个字)