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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏冬 中级黑马   /  2012-11-23 11:13  /  2694 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class 冒泡排序 {
        public static void mao(int[] arr){
                System.out.print("排序前的数组是");
                for(int i=0;i<arr.length;i++){
                        System.out.print(arr[i]+" ");
                }
        }
        public static void main(String[] args){
                int[] arr={3,5,78,88,100};
                mao(arr);
                maoPao(arr);
                System.out.print("排序后的数组是");
                mao(arr);
        }
        public static void maoPao(int[] arr){
                for(int i=0;i<arr.length;i++){
                        for(int j=0;j<arr.length;j++){
                                if(arr[i]>arr[j]){
                                        int temp=arr[i];
                                        arr[i]=arr[j];
                                        arr[j]=temp;
                                }
                        }
                }
        }
}
为什么不按照毕老师的比较的方法 -1-i 出来的结果是一样的呢??????

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

10 个回复

倒序浏览
正确的冒泡排序是这样的
public static void maoPao(int[] arr){
                 for(int i=0;i<arr.length-1;i++){                //你的  i<arr.length;
                         for(int j=0;j<arr.length-1-i;j++){     //你的  j<arr.length;

                                 if(arr[i]>arr[j]){
                                         int temp=arr[i];
                                         arr[i]=arr[j];
                                         arr[j]=temp;
                                 }
                         }
                 }
         }
你这代码本身写的就有问题,不知道你怎么可以运行的

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
PanTiangong 发表于 2012-11-23 11:20
正确的冒泡排序是这样的
public static void maoPao(int[] arr){
                 for(int i=0;i ...

好像应该是这样吧?
if(arr[j]>arr[j+1]){
                                         int temp=arr[j];
                                         arr[j]=arr[j+1];
                                         arr[j+1]=temp;
                                 }
回复 使用道具 举报
选择排序和冒泡排序的区别就是:
1、选择排序每轮排序后最值出现在第一位,冒泡排序每轮排序后最值出现在最后位。
2、具体表现到for循环的区别就是:
        选择排序:for(int i=0;i<arr.length-1;i++)
            {
                    for(int j=i+1;j<arr.length;j++)

         冒泡排序:
                   for(int i=0;i<arr.length-1;i++)
            {
                    for(int j=0;j<arr.length-1-i;j++)
                    {
你的代码即看不出是选择排序,也看不出是冒泡排序。
public class SortTest {

    public static void main(String[] args) {
        // TODO code application logic here
        int[] arr = {3,4,1,6,5,9,7,2};
        bubbleSort(arr);
      
    }
   
    public static void bubbleSort(int[] arr)
    {
            for(int i=0;i<arr.length-1;i++)
            {
                    for(int j=0;j<arr.length-1-i;j++)
                    {
                            if(arr[j]>arr[j+1])
                            {
                                    int temp=arr[j];
                                    arr[j]=arr[j+1];
                                    arr[j+1]=temp;
                            }
                    }
            }
            System.out.println("排序后的数组是:");
             for(int x=0;x<arr.length;x++)
        {
                if(x!=arr.length-1)
                        System.out.print(arr[x]+",");
                else
                        System.out.print(arr[x]);
        }
   
    }
}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报

你的这一段代码
       public static void maoPao(int[] arr){
                 for(int i=0;i<arr.length;i++){
                         for(int j=0;j<arr.length;j++){
                                 if(arr[i]>arr[j]){
                                         int temp=arr[i];
                                         arr[i]=arr[j];
                                         arr[j]=temp;
                                 }
                         }
            }
}
你的代码i从0到arr.length 并且j从0到arr.length 结果不会出错效率肯定比老师讲的的低,因为原先的冒泡排序内循环一次,就会将已经比较得出的最大值放到数组最尾部,并在下一次循环中最大值不在参与比较,而你的代码是每一循环虽然得出最大值,但是最大值依然参与到下一次的循环比较当中。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
时间复杂度增高了不少额  当然
回复 使用道具 举报
秦锐 初级黑马 2012-11-23 13:15:39
7#
秦锐 发表于 2012-11-23 13:05
你的这一段代码
       public static void maoPao(int[] arr){
                 for(int i=0;i ...

sorry !你这个是选择排序不是冒泡排序,我看错了。
回复 使用道具 举报
你可以不按毕老师讲的方法来做,因为可以有很多种方法实现同一种结果,代码是死的  而思想是活的;但是呢,你的这个冒泡是有问题的,不可能会有正确的结果 的。
回复 使用道具 举报
魏冬 中级黑马 2012-11-23 14:09:10
9#
PanTiangong 发表于 2012-11-23 11:20
正确的冒泡排序是这样的
public static void maoPao(int[] arr){
                 for(int i=0;i ...

如果你觉得我写的有问题 你可以把我的代码复制下来 看看输出结果是对还错!
回复 使用道具 举报
那是比较的次数就多了,错到没有错,那只是代码运行的时间相对就长了,要是要比较的数组很大的话,那你话费的时间就很长了,所以有些不必要的就不需要进行比较了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马