2016-09-12 47 views
-1

嗨我的代码有问题。我的程序应该使用合并排序对用户输入的值进行排序。这是我的代码。合并排序来排序n值数组

public class mergeSort { 

private int[] inputArray; 
private int[] tempMergeArray; 
private int length; 

public static void main (String args[]) 
{ 
    Scanner scanner = new Scanner(System.in); 
    System.out.println("Enter size of your array"); 
    int n = scanner.nextInt(); 

    int[] array = new int[n]; 
    System.out.println("Enter numbers: "); 

    for (int i=0; i<array.length; i++){ 
     array[i] = scanner.nextInt(); 
     mergeSort mms = new mergeSort(); 
     mms.sort(array[i]); 
     for (int j:array){ 
     System.out.println(j); 
     System.out.print(" "); 
     } 
    } 
} 

public void sort(int array[]){ 

    this.inputArray = array; 
    this.length = array.length; 
    this.tempMergeArray = new int [length]; 
    doMergeSort(0, length - 1); 
} 
private void doMergeSort(int lowerIndex, int higherIndex) { 

    if (lowerIndex < higherIndex) { 
     int middle = lowerIndex + (higherIndex - lowerIndex)/2; 
     doMergeSort(lowerIndex, middle); 
     doMergeSort(middle + 1, higherIndex); 
     mergeParts(lowerIndex, middle, higherIndex); 
    } 
} 
private void mergeParts(int lowerIndex, int middle, int higherIndex) { 

    for (int i = lowerIndex; i <= higherIndex; i++) { 
     tempMergeArray[i] = inputArray[i]; 
    } 
    int i = lowerIndex; 
    int j = middle + 1; 
    int k = lowerIndex; 
    while (i <= middle && j <= higherIndex) { 
     if (tempMergeArray[i] <= tempMergeArray[j]) { 
      inputArray[k] = tempMergeArray[i]; 
      i++; 
     } else { 
      inputArray[k] = tempMergeArray[j]; 
      j++; 
     } 
     k++; 
    } 
    while (i <= middle) { 
     inputArray[k] = tempMergeArray[i]; 
     k++; 
     i++; 
    } 
} 

它在第23行有一个错误:mms.sort(array [i]); 其中说类型mergeSort中的方法sort(int [])不适用于参数(int)。

预先感谢您!

+1

定义的方法需要一个int数组作为其参数。你的呼叫传递一个int。 – paisanco

回答

2

你的方法传递要传递的单个输入

for (int i=0; i<array.length; i++){ 
    array[i] = scanner.nextInt(); 
    } 
mergeSort mms = new mergeSort(); 
mms.sort(array); 
1

也就是说方法需要阵列的阵列。你正在传递一个值array[i]。您需要将其更改为mms.sort(array),因为那样您将传递整个数组而不是位于for循环中的位置[i]处的值。