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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wuzeshui 中级黑马   /  2016-1-16 10:31  /  1134 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

冒泡法好像很出名,但是我们的教程上没有,求大神能写个大概格式

13 个回复

倒序浏览
本帖最后由 宋达思 于 2016-1-16 11:43 编辑

public static void bubbleSort(int[] arr)
        {
//x为1轮中每2个相邻元素比较的次数,最后只剩下1个元素时就不用比了,所以-1
                for (int x=0;x<arr.length-1 ;x++ )
                {
//-1:防止角标越界; -x:y的角标随x的比较次数而变化,减少每1轮比较元素的个数
                        for (int y=0;y<arr.length-1-x ;y++ )
                        {
                                if(arr[y]>arr[y+1])
                                        swap(arr,y,y+1);
                        }
                }
        }
        public static void bubbleSort2(int[] arr)//只是bubbleSort的反向比较,其它一样
        {
                for (int x=arr.length-1;x>0 ;x-- )
                {
                        for (int y=0;y<x ;y++ )
                        {
                                if(arr[y]>arr[y+1])
                                        swap(arr,y,y+1);
                        }
                }
        }
        public static void swap(int[] arr,int a ,int b)
        {
                int temp=arr[a];
                arr[a]=arr;
                arr=temp;
        }
以下为冒泡原理图:

回复 使用道具 举报 1 0
宋达思 发表于 2016-1-16 11:41
public static void bubbleSort(int[] arr)
        {
//x为1轮中每2个相邻元素比较的次数,最后只剩下1个 ...

好全面。。。。。
回复 使用道具 举报
擎天柱 来自手机 中级黑马 2016-1-16 14:36:39
板凳
基本思想:每一趟选择一个最小元素上浮。
回复 使用道具 举报
拿数组中第一个元素与第二个比较,大的放后面,小的放前面,
然后拿第二个元素与第三个比较,大的放后面,小的放前面
依次类推,
最后是拿倒数第二个于倒数第一个比较,大的放后面,小的放前面,
一轮下来最大的一个数就被放在了最后位置,
下一轮比较就忽略到最后位置
以此类推
大的数就像一只气泡一样慢慢浮上来,循环一次就确定一个
回复 使用道具 举报
擎天柱 发表于 2016-1-16 14:36
基本思想:每一趟选择一个最小元素上浮。

最大。。。。。。。。。。。。。。。。。。。

点评

有的书是选择最大沉底,我觉得最小上浮者比较形象  发表于 2016-1-16 21:24
回复 使用道具 举报
擎天柱 来自手机 中级黑马 2016-1-16 21:36:10
7#
放养的饼干 发表于 2016-1-16 17:28
最大。。。。。。。。。。。。。。。。。。。

可以选择最大下沉,效果一样,但不形象
回复 使用道具 举报
擎天柱 来自手机 中级黑马 2016-1-16 21:40:20
8#
放养的饼干 发表于 2016-1-16 17:28
最大。。。。。。。。。。。。。。。。。。。

正序…。。。。。。
回复 使用道具 举报
String类那里会学到的。。。
回复 使用道具 举报
        public static void bubbleSort(int[] arr)
        {
                for (int x=0;x<arr.length-1 ;x++ )
                        for (int y=0;y<arr.length-x-1 ;y++ )//-x;让每一次比较的元素减少,-1;避免角标越界。
                        {
                                if (arr[y]<arr[y+1])
                                {
                                        int temp =arr[y];
                                        arr[y]=arr[y+1];
                                        arr[y+1]=temp;
                                }
                        }
                }
        }

        public static void printArray(int[] arr)
        {
                for (int x=0;x<arr.length ; x++)
                {
                        if(x!=arr.length-1)
                                System.out.print(arr[x]+",");
                        else
                                System.out.println(arr[x]+",");
                }
       
        }
        public static void main(String[] args)
        {
                int[] arr ={5,1,6,4,8,9};
                //排序前;
                printArray(arr);
                //排序
                /lectSort(arr);
                /bbleSort(arr);
                //Arrays.sort(arr);//这是java种已经定义好的一种排序方式,开发中,对数组排序,要使用该句代码。
                //排序后;
                printArray(arr);

       
        }
回复 使用道具 举报
就是把数组从前一次往后排序,最值的往后排,就像水里冒的气泡一样
回复 使用道具 举报
楼下大神好温馨的回答,攒
回复 使用道具 举报
学习了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马