A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© code2014 中级黑马   /  2014-5-21 21:53  /  1772 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

冒泡排序是怎么回事

15 个回复

正序浏览
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

  冒泡排序算法的运作如下:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
1 public class BubbleSort{
2      public static void main(String[] args){
3          int score[] = {67, 69, 75, 87, 89, 90, 99, 100};
4          for (int i = 0; i < score.length -1; i++){    //最多做n-1趟排序
5              for(int j = 0 ;j < score.length - i - 1; j++){    //对当前无序区间score[0......length-i-1]进行排序(j的范围很关键,这个范围是在逐步缩小的)
6                  if(score[j] < score[j + 1]){    //把小的值交换到后面
7                      int temp = score[j];
8                      score[j] = score[j + 1];
9                      score[j + 1] = temp;
10                  }
11              }            
12              System.out.print("第" + (i + 1) + "次排序结果:");
13              for(int a = 0; a < score.length; a++){
14                  System.out.print(score[a] + "\t");
15              }
16              System.out.println("");
17          }
18              System.out.print("最终排序结果:");
19              for(int a = 0; a < score.length; a++){
20                  System.out.print(score[a] + "\t");
21         }
22      }
23  }
回复 使用道具 举报
这种问题也太小白了啊,不知道回答这种问题会不会加经验。。。
回复 使用道具 举报
数组中,0角标的与1角标的比较,大的右移,1角标与2角标比较,大的右移,一次类推最后数组最右的是最大的数字.然后再从头开始这个循环,只是最右面的数字不再参与
回复 使用道具 举报
原理就是比较后把大的或小的都移到一侧,两两比较后移动一次,通过两个循环,分别控制比较的次数
回复 使用道具 举报
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。
回复 使用道具 举报
你确定你有认真看视频思考问题???
24分的技术分跟你问的问题明显不符
回复 使用道具 举报
本帖最后由 TS__likewise 于 2014-5-22 10:20 编辑

加油路过
回复 使用道具 举报
比如有n个数,从一个相邻的两个元素比较(1和2比),大的放到右边,然后接着新的相邻的两个比较(新的2和3比),一直循环一遍,这样最大的跑到最后面,这是一层循环,比较了n-1次
然后剩下的n-1个数,再相邻的比较一遍,比较了n-2次
。。。
剩下两个数,比较1次
这样总共比较了1+2+3+...+n-1次,每次循环都是最大的数跑到最后面,像冒泡一样,最大的泡一直往上走,所以叫冒泡排序
回复 使用道具 举报
wqmsan 中级黑马 2014-5-22 09:10:27
8#
不懂就要反复看呀!有些问题不是一看就明白的。。。
回复 使用道具 举报
彭飞 中级黑马 2014-5-21 22:47:38
7#


建议小伙伴认真看视频。

介个样子是混不到技术分的哟。
回复 使用道具 举报
D:\桌面文件\示意1.jpg
冒泡排序先是一堆数组中相邻的两个元素进行比较,如果符合条件就换位。
D:\桌面文件\示意2.jpg
第一圈排序,以此类推。。。。

使用For循环进行嵌套,外层循环控制比较趟数,循环一次减少一次。内循环控制比较次数。外循环每执行一次,内循环的比较也相应减少一次。
以下是代码--------------------------------
        public static void sumPai(int[] arr)
        {
                //控制比较的趟数,循环一次,表示比较了一趟
                for(int i=0;i<arr.length-1;i++)
                {
                                                  
                        for(int j=0;j<arr.length-i-1;j++)
                        {
                                if(arr[j]<arr[j+1])//判断比较条件
                                {
                                int temp=arr[j];//使用交换法
                                arr[j]=arr[j+1];
                                arr[j+1]=temp;
                               
                                }
                        }
                }

        }
回复 使用道具 举报
冒泡排序是一种简单的排序算法。 比较相邻的元素。如果第一个比第二个大,就交换他们两个。最后的元素应该会是最大的数。
回复 使用道具 举报
。。。百度一下就有了。
回复 使用道具 举报
认真听课小伙伴
回复 使用道具 举报
视频不是有说吗。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马