开发者社区> 问答> 正文

java冒牌排序 400 请求出错 

public class MaoPaoPaiXu {
    public static void main(String []args) {
        int []fl={59,60,4,5,1};
        
        for(int i=0;i<fl.length-1;i++) {
            for(int j=i+1;j<fl.length;j++) {
                if(fl[j]>fl[i]) {
                     int temp=fl[j];
                     fl[i]=fl[j];
                     fl[i]=temp;
                    
                    }
                }
            }
            for(int i=0;i<fl.length;i++) {
                System.out.print(fl[i]+"  ");
            }
        
    }
}
这个打出来是{60.60.5.5.1}但是我想要的是{60.59.5.4.1}请问哪里出错呢

展开
收起
黄一刀 2020-05-26 20:31:03 496 0
1 条回答
写回答
取消 提交回答
  • 第二步,应该是fj=fi######第二个for循环括号里面的条件写错了######

    谢谢各位

    ######

    将你的代码稍加修改如下:

     public class MaoPaoPaiXu { public static void main(String []args) { int []fl={59,60,4,5,1};

        for(int i=0;i<fl.length-1;i++) {
            for(int j=i;j<fl.length-2;j++) {
                if(fl[j+1]>fl[j]) {
                     int temp=fl[j+1];
                     fl[j+1]=fl[j];
                     fl[j]=temp;
                    }
                }
            }
            for(int i=0;i<fl.length;i++) {
                System.out.print(fl[i]+"  ");
            }
        
    }
    

    }

    输出:60  59  5  4  1

    下面介绍一个冒泡排序的代码。它考虑的比较全面,请仔细学习。

    import java.util.Arrays;
    import java.util.Random;
    
    public class BubbleSort{  
    
    static void bubble_sort(int a[]){ //起泡排序方法,将数组排序,排成递减序列
    int i,j,t, n=a.length;
    boolean swap=true; 
    int count=1;
    
    /* 如果,某趟循环后,布尔变量 swap 仍然为 false,则说明此趟循环,
    *  未发生过交换。 这意味着,数组已经有序,即排序操作已经完成,
    *  排序应终止。因此,布尔变量 swap 为 true, 是外层循环的一个必要条件。
    */
    for(i=n-1; i>0 && swap;--i) { 
     /*每次外层循环,先设布尔变量swap 为 false,说明尚未发生交换*/
    	swap=false; 
    /* The boolean flag remains false during the last bobble run, 
     * implying that no swap occurred and the whole array is completely sorted. 
     * In this case one should terminate the bubble sort process immediately.
     */ 
       for(j=0;j<i;++j) // i 为外层循环的控制变量,在此用作内循环的上限。
    /* 外层循环的控制变量 i 每次完成一趟循环后,递减1。
    *  用它作内循环的上限,可以终止在稳定区内做不必要的比较。 
    */
    /* We use i ,which has one_decrease after each outer_for loop, 
     * as the upper limit for the inner_loop to avoid the unnecessary 
     * comparisons made of the stable region.
     * The stable region is the array segement above the index i.
     */
    	if(a[j]<a[j+1]){  //若后边的元素比前边的大,即为逆序
    	/*  则将两个记录交换*/
    		t=a[j];
    		a[j]=a[j+1];
    		a[j+1]=t;
    		swap=true; 
    	/* 布尔变量值 swap 为 true 说明,
    	*  在这一趟起泡排序中,至少发生过一次交换。
    	*/
    /*   the boolean flag is true implying that 
     *   at least a swap occurred during this bobble run
     */	
    		}
    	System.out.print("The " + count++ + " run: ");	
    	System.out.println(Arrays.toString(a));
    	}
    }
    	
    	public static void main(String[] args)
    	{
    		int[] array=new int[15];
    		Random rand= new Random();
    		for (int i=0;i<array.length;i++)
    		array[i]= rand.nextInt(120);
    		System.out.print("The original: ");
    		System.out.println(Arrays.toString(array));
    		bubble_sort(array);
    	}
    }
    

    输出:

    The original: [113, 89, 105, 119, 84, 94, 35, 88, 35, 33, 72, 60, 119, 62, 42]
    The 1 run: [113, 105, 119, 89, 94, 84, 88, 35, 35, 72, 60, 119, 62, 42, 33]
    The 2 run: [113, 119, 105, 94, 89, 88, 84, 35, 72, 60, 119, 62, 42, 35, 33]
    The 3 run: [119, 113, 105, 94, 89, 88, 84, 72, 60, 119, 62, 42, 35, 35, 33]
    The 4 run: [119, 113, 105, 94, 89, 88, 84, 72, 119, 62, 60, 42, 35, 35, 33]
    The 5 run: [119, 113, 105, 94, 89, 88, 84, 119, 72, 62, 60, 42, 35, 35, 33]
    The 6 run: [119, 113, 105, 94, 89, 88, 119, 84, 72, 62, 60, 42, 35, 35, 33]
    The 7 run: [119, 113, 105, 94, 89, 119, 88, 84, 72, 62, 60, 42, 35, 35, 33]
    The 8 run: [119, 113, 105, 94, 119, 89, 88, 84, 72, 62, 60, 42, 35, 35, 33]
    The 9 run: [119, 113, 105, 119, 94, 89, 88, 84, 72, 62, 60, 42, 35, 35, 33]
    The 10 run: [119, 113, 119, 105, 94, 89, 88, 84, 72, 62, 60, 42, 35, 35, 33]
    The 11 run: [119, 119, 113, 105, 94, 89, 88, 84, 72, 62, 60, 42, 35, 35, 33]
    The 12 run: [119, 119, 113, 105, 94, 89, 88, 84, 72, 62, 60, 42, 35, 35, 33]

     

    ######你这个冒泡效率低了,不必要将 已经冒号泡的冒一遍######

    冒牌排序,你是要假冒伪劣的排序算法吗?

    2020-05-27 10:20:42
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载