`
SCYForce
  • 浏览: 40809 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

算法笔记(第一部分)-- 排序之白话冒泡排序

阅读更多
冒泡排序,是所有排序中最简单的一种,也是效率最低的一种,时间复杂度О(n²),空间复杂度O(n)。冒泡排序没有改变原始元素的相对位置,因此是稳定的排序。

冒泡排序动画:



冒泡排序Java代码(递增):
public void bubble_sort(int[] data){
            for(int i=0; i<data.length; i++){
                  for(int j=0; j<data.length-1-i; j++){
                        if(data[j]>data[j+1]){
                              swap(data,j,j+1);
                        }
                  }
            }
      }


由代码我们可以看出冒泡排序的工作原理是第一个循环的作用是遍历整个数据集,第二个循环从第一个数开始顺次比较相邻两数大小,若后数比前数大则交换。需要注意的是j的条件是小于data.length-i,因为结束一次外层循环后,最大的数已经被交换到了数组的最后,所以无需再次进行比较。P.S. 冒泡排序有优化的空间,外层循环是不是只要做一半就够了呢?
6
2
分享到:
评论
12 楼 hacer9791 2009-02-21  
以下是对冒泡排序的一点优化:减少了外层循环的次数


public class MaoPao{
public void showData(int[] a){
int[] shuzu=a;
int aa=1;
int b=0;
int temp=0;
while(aa>0){
  b=0;
for(int i=0;i<shuzu.length-1;i++){
   if(shuzu[i]<shuzu[i+1]){
  temp=shuzu[i];
  shuzu[i]=shuzu[i+1];
  shuzu[i+1]=temp;
  b=1;
}
}
aa=b;
}
for(int k=0;k<shuzu.length;k++){
System.out.println(shuzu[k]);
}
}

public static void main(String[] args){
int[] arr={1,2,3,4,5,6};
new MaoPao().showData(arr);
}
}
11 楼 lenky0401 2008-09-07  
冒泡排序有优化的空间,外层循环是不是只要做一半就够了呢?

确定这样的?

你这个一半是啥意思?

是不是如果data.length==5的话 外层循环只要到(5/2+1)=3就可以保证已经排序好了?【这种情况不对啊】

还是当一趟内部循环没有任何交换的话 就可以直接break了【这种情况 任何一个讲冒泡算法的都会带到吧】
10 楼 zoninge 2008-09-03  
呵呵,有意思。。。
引用
冒泡排序有优化的空间,外层循环是不是只要做一半就够了呢?

恩,之前也不知道,看C++的书,上面就说道了这个东西
9 楼 hlily2005 2008-09-02  
难怪之前的没看懂了 ,因为没看这个,呵呵~~~
8 楼 yeshucheng 2008-09-02  
图片貌似不对啊
7 楼 percent 2008-08-28  
图片不是演示冒泡的
    冒泡说,他自己的思想是每次只成功筛选一条未处理记录集合中的一个记录,直至完成所有记录
6 楼 ham 2008-08-28  
congjl2002 写道
这个图片说明了冒泡排序吗?

这个图模拟了冒泡的过程,将所有的点由高到低,比较,交换,然后将最高的移到最右边,依序排列。就出现了这种动画效果。

照语义来说,冒泡,应该是竖向的移动,这个图却让这些点进行横向的移动,让人有些摸不着头脑。

SCYForce 写道
冒泡排序有优化的空间,外层循环是不是只要做一半就够了呢?

要是只做一半,就算能够排序能够顺利进行,但那还能称之为冒泡吗?
5 楼 congjl2002 2008-08-28  
这个图片说明了冒泡排序吗?
另外你最后一句话没明白什么意思,赐教一下
4 楼 sunfengcheng 2008-08-28  
呵呵!这个。。。。大学就经常写这种东东!现在更少了...
3 楼 SCYForce 2008-08-28  
谢谢您的提醒,您看的还真仔细,动画是Wiki上摘的,我的实现是从左到右。
2 楼 mudong 2008-08-28  
你这动画完全反啦
1 楼 sunnylocus 2008-08-28  
呵呵,第一次弄这个冒泡脑子转不过来,整整想了6个小时才搞清楚,复习了。

相关推荐

    MoreWindows白话经典算法之七大排序

    冒泡排序、插入排序、选择排序、希尔排序、归并排序、快速排序和堆排序是七大基础的计算机算法,它们各自有着不同的特点和适用场景。 一、冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地遍历要...

    MoreWindows白话经典算法之七大排序第2版(高清)

    本书《更多Windows白话经典算法之七大排序第2版》是一部深入浅出讲解七种经典排序算法的著作,旨在帮助读者理解并掌握冒泡排序、直接插入排序、直接选择排序、希尔排序、归并排序、快速排序以及堆排序等基本概念和...

    MoreWindows白话经典算法之七大排序(高清版)

    冒泡排序是一种简单直观的排序算法,它的基本思想是从第一个元素开始,比较相邻元素的大小,如果前一个元素大于后一个元素则交换它们的位置,这样一轮比较下来,最大的元素会像气泡一样“浮”到最后的位置。...

    白话经典算法之七大排序

    冒泡排序是最简单的排序算法之一,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的...

    白话经典算法之七大排序(高清版)

    1. 冒泡排序(Bubble Sort):冒泡排序是最简单的排序算法之一,通过不断交换相邻的逆序元素来逐步排序。它的时间复杂度在最坏情况下为O(n^2),但在最佳情况下(已排序数组)可以达到O(n)。 2. 插入排序(Insertion...

    白话经典算法系列之六 快速排序 快速搞定 - MoreWindows - 博客园1

    快速排序是一种高效的排序算法,由C.R.A.Hoare在1962年提出。它基于分治策略,但其完整流程可以更准确地描述为“挖坑填数+分治法”。快速排序的核心思想是通过选取一个基准数,将数组分为两部分:一部分的所有元素都...

    排序算法经典讲解

    本资源"MoreWindows白话经典算法之七大排序(高清版).pdf"提供了一套详尽的排序算法讲解,涵盖了七大经典的排序算法。以下是这些排序算法的详细介绍: 1. 冒泡排序(Bubble Sort): 冒泡排序是一种简单的交换排序,...

    [网盘]MoreWindows白话经典算法之七大排序第2版(高清)

    在第一版的基础上新加了对冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法的总结篇,方便大家复习,合适作为笔试面试前的复习资料。

    经典算法之七大排序白话讲解第二版

    根据给定文件的信息,本文将深入探讨七大经典排序算法,并结合具体的实现方法,帮助读者更好地理解每种排序算法的工作原理及适用...接下来的文章中将继续探讨另外两种排序算法——冒泡排序和直接插入排序,敬请期待。

    More Windows白话经典数据结构算法之七大排序最新整理版

    冒泡排序是最基础也是最容易理解的排序算法之一。它的基本思路是通过不断地比较相邻两个元素,并根据比较结果进行交换来实现排序。整个过程如同气泡逐渐上升一样,较大的元素会逐步地移动到序列的末尾。 **冒泡排序...

    基于python 3 编程实现常用的排序算法,包括:冒泡排序、直接插入排序、直接选择排序、希尔排序、归并排序、快速排序、堆排序

    基于python 3 编程实现常用的排序算法,包括:冒泡排序、直接插入排序、直接选择排序、希尔排序、归并排序、快速排序、堆排序.zip 基于python 3 编程实现常用的排序算法,包括:冒泡排序、直接插入排序、直接选择...

    白话经典算法

    冒泡排序是一种简单的排序算法,通过重复遍历待排序的数组,比较相邻元素并交换位置,使得较大的元素逐渐"冒"到数组的末尾。其时间复杂度在最坏情况下为O(n^2),在最好情况下(已排序)为O(n)。 2. **直接插入排序*...

    白话的排序总结

    1. 初始化:假设数组的第一个元素已经是排序好的。 2. 遍历:从未排序的部分取一个元素,与已排序的部分进行比较,找到正确的位置插入。 3. 重复:继续从未排序的部分取出下一个元素,重复以上过程,直到所有元素都...

    白话算法(理论联系实际)-初探遗传算法接近完美

    1. **种群**:遗传算法的起点是一个包含多个解(个体)的集合,每个个体都有一个与之相关的适应度值,这通常反映了该解的质量或性能。 2. **基因编码**:个体的基因编码是问题解决方案的表示方式,可以是二进制串、...

    基于javascript实现插入排序,希尔排序,简单选择排序,冒泡排序,快速排序

    希尔排序 基于javascript实现插入排序,希尔排序,简单选择排序,冒泡排序,快速排序 基于javascript实现插入排序,希尔排序,简单选择排序,冒泡排序,快速排序

    最短路径算法—Bellman-Ford(贝尔曼-福特)算法分析与实现(CC++)

    最短路径算法—Bellman-Ford(贝尔曼-福特)算法分析与实现(CC++),希望对你能有所帮助!

Global site tag (gtag.js) - Google Analytics