黑马程序员技术交流社区

标题: 冒泡排序 [打印本页]

作者: 魏冬    时间: 2012-11-23 11:13
标题: 冒泡排序
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 出来的结果是一样的呢??????
作者: 潘天功    时间: 2012-11-23 11:20
正确的冒泡排序是这样的
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;
                                 }
                         }
                 }
         }
你这代码本身写的就有问题,不知道你怎么可以运行的
作者: 张学永    时间: 2012-11-23 11:47
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;
                                 }
作者: 马良    时间: 2012-11-23 11:51
选择排序和冒泡排序的区别就是:
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]);
        }
   
    }
}

作者: 秦锐    时间: 2012-11-23 13:05

你的这一段代码
       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 结果不会出错效率肯定比老师讲的的低,因为原先的冒泡排序内循环一次,就会将已经比较得出的最大值放到数组最尾部,并在下一次循环中最大值不在参与比较,而你的代码是每一循环虽然得出最大值,但是最大值依然参与到下一次的循环比较当中。
作者: jerry2627    时间: 2012-11-23 13:14
时间复杂度增高了不少额  当然
作者: 秦锐    时间: 2012-11-23 13:15
秦锐 发表于 2012-11-23 13:05
你的这一段代码
       public static void maoPao(int[] arr){
                 for(int i=0;i ...

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

如果你觉得我写的有问题 你可以把我的代码复制下来 看看输出结果是对还错!
作者: 聽聽我dē❤    时间: 2012-11-23 14:26
那是比较的次数就多了,错到没有错,那只是代码运行的时间相对就长了,要是要比较的数组很大的话,那你话费的时间就很长了,所以有些不必要的就不需要进行比较了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2