2016-02-01 141 views
-5
public static int[] sortIntegers(int[] array) { 
    int n = array.length; 
    int temp = 0; 

    for (int k = 0; k < n - 2; k++) { 
     //controls how many passes is needed to sort the entire array 
     int test=0; 
     for (int i = 0; i < n - k - 1; i++) { 
      //controls the amount of swaps that is needed for each pass 
      //ascending order 
      if (array[i] > array[i + 1]) 
       //swap array[i] and array[i+1] 
       temp = array[i]; 
      array[i] = array[i + 1]; 
      array[i + 1] = temp; 
      test=3; 
     } 
     if(test==0){ 
      break; 
     } 
    } 
    return array; 
} 

public static void printArray(int[] array){ 
    for(int i=0; i<=array.length-1; i++){ 
     System.out.println("Element " + i + " is " + array[i]); 
    } 
} 

所以我想按升序对数组进行排序,它似乎没有工作。另外我的课程出于某种原因说创建一个新的sortedIntegers数组,但我不明白为什么你会想这样做,当你可以改变传递的数组。我的朋友告诉我,创建一个新的数组是更简单的方法,但我觉得我不是得到的东西....有人能告诉我这个代码的问题是什么?

+1

你不能使用'Collections.sort()'? –

+3

交换'array [i]'和'array [i + 1]'时,缺少大括号('{'和'}')。 –

+2

“我的课程出于某种原因说创建一个新的数组” - 因为方法不应该修改它们的参数 –

回答

3

这些行:

  if (array[i] > array[i + 1]) 
       //swap array[i] and array[i+1] 
       temp = array[i]; 
      array[i] = array[i + 1]; 
      array[i + 1] = temp; 

不要交换array[i]array[i+1]。它实际上只是将array[i]分配给temp。随后的两行无条件执行。

你需要括号身边:

  if (array[i] > array[i + 1]) { 
       //swap array[i] and array[i+1] 
       temp = array[i]; 
       array[i] = array[i + 1]; 
       array[i + 1] = temp; 
      } 
0

不要交换 '数组[I]' 和 '排列[I + 1]'。它实际上只是将'array [i]'赋值给temp。随后的两行无条件执行。

确保你的代码是这样的...把括号放在它们周围。

if (array[i] > array[i + 1]) { 
    //swap array[i] and array[i+1] 
    temp = array[i]; 
    array[i] = array[i + 1]; 
    array[i + 1] = temp; 
} 
相关问题