2016-11-07 51 views
0

所以我已经完成了大部分代码。我只是不知道为什么排序列表不是从最小到最大的顺序。该任务是从1-10生成10个随机整数。显示未排序的列表。显示排序(从最小到最大)。显示数组内容。Java bubblesort 1-100

 int [] number = new int [10]; 

     System.out.print("Random Numbers:"); 
     for (int d = 0 ; d<number.length ; d++){ 
      int RandomG = g.nextInt(100) + 1; 
      System.out.print("\t" + RandomG); 
      number[d] = RandomG ; 
     } 
     System.out.print("\nSorted Numbers:"+Arrays.toString(BubbleSortAsceMethod(number))); 
    } 

    public static int [] BubbleSortAsceMethod(int[] x) { 
     int temp; 

     for (int i = 0; i < x.length; i++) { 
      for (int j = 1; j < x.length -i; j++) { 
       if (x[j - 1] < x[j]) { 
        temp = x[j - 1]; 
        x[j - 1] = x[j]; 
        x[j] = temp; 
       } 
      } 
     } 
     return x; 
    } 
} 
+2

请通过缩进每块四个空间,通过确保同一块块或同级别每行缩进的精确相同数量的其他格式化你的代码。是的,这是一个挑剔的要求,但同样,我们是志愿者,并且要付出努力,以方便别人来帮助你。 –

+2

另外,请包含您的完整代码。你从一种方法开始。 –

+2

好吧,我试图格式化您的代码,但它仍然不可理解。就好像你已经发布了足够的代码来挫败我们,但还不足以帮助我们发现你的问题。请修复。 –

回答

0

您需要更改条件

当前代码

if (x[j - 1] < x[j]) 

固定码

if (x[j - 1] > x[j]) 

但是你可以通过添加isSorted标志提升你的代码。

public static int[] BubbleSortAsceMethod(int[] x) { 
    for (int i = 1; i < x.length; i++) { 
     boolean isSorted = true; 

     for (int j = 0; j < x.length - i; j++) { 
      if (x[j] > x[j + 1]) { 
       int temp = x[j]; 
       x[j] = x[j + 1]; 
       x[j + 1] = temp; 
       isSorted = false; 
      } 
     } 
     if (isSorted) { 
      break; 
     } 
    } 
    return x; 
} 
0

我只是想不通,为什么排序列表中是不是为了从最小到最大。

你的问题是在x[j - 1] < x[j]。当前的遍历值(temp = x[j - 1])之前的temp变量被指定了一个小值,然后它与当前遍历值中较大的值进行交换,这意味着当前遍历之前的值始终会有比当前遍历值更大的值。这就是为什么这个数字从大到小排序。

要纠正它,只是简单地改变从x[j - 1] < x[j]条件为x[j - 1] > x[j],其中temp值将具有最大值当前遍历值之前被分配从一步法和交换当前遍历值与最低值的位置。因此,当前遍历之前的值将总是比其当前遍历值更低。

public static void main(String[] args) { 
    int[] number = new int[10]; 
    Random g = new Random(); 

    System.out.print("Random Numbers:"); 
    for (int d = 0; d < number.length; d++) { 
     int RandomG = g.nextInt(100) + 1; 
     System.out.print("\t" + RandomG); 
     number[d] = RandomG; 
    } 

    System.out.print("\nSorted Numbers:" + Arrays.toString(BubbleSortAsceMethod(number))); 
} 

public static int[] BubbleSortAsceMethod(int[] x) { 
    int temp; 

    for (int i = 0; i < x.length; i++) { 
     for (int j = 1; j < x.length - i; j++) { 
      if (x[j - 1] > x[j]) { 
       temp = x[j - 1]; 
       x[j - 1] = x[j]; 
       x[j] = temp; 
      } 
     } 
    } 

    return x; 
} 

注:您的代码是不完整的,所以我需要去完成它(你),也许它可能是不实际的代码相同。请在下次提问时让其他人了解它。