2016-11-21 8 views
0

숫자의 배열을 취합니다 : {51, 63, 48, 98, 75, 63, 92, 30, 32, 32, 36, 89, 4, 76 , 73, 90, 64, 99, 36, 96} 중에서 가장 낮은 것부터 가장 높은 것 순으로 정렬 한 다음 가장 높은 순 서로 정렬합니다.삽입 정렬을 사용하여 배열 정렬

가장 높은 값부터 가장 낮은 값까지 인쇄하려고하면 첫 번째 출력이 동일하게됩니다. 누구든지 내 코드에서 오류를 볼 수 있습니까?

package l7c14sort; 

import java.util.Arrays; 

public class L7C14Sort { 

public static void main(String a[]){ 
    int[] arr1 = {51, 63, 48, 98, 75, 63, 92, 30, 32, 32, 36, 89, 4, 76, 73, 90, 64, 99, 36, 96}; 


    int[] arr2 = doInsertionSort(arr1); 

    int[] arr3 = doInsertionSortAgain(arr1); 

    System.out.println("Original input: "+Arrays.toString(arr1)+"\n"); 
    System.out.println("Lowest to highest:\n"); 


    for(int i:arr2) 
    { 
     System.out.print(i); 
     System.out.print(", "); 

    } 
    System.out.println("\n\n"); 
    System.out.println("Highest to lowest:\n"); 

    for(int k:arr3) 
    { 
     System.out.print(k); 
     System.out.print(", "); 

    } 

    System.out.println("\n"); 
} 

public static int[] doInsertionSort(int[] input){ 

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

      } 
     } 
    } 
    return input; 
} 

public static int[] doInsertionSortAgain(int[] input2){ 

    int temp2; 
    for (int k = 1; k < input2.length; k++) { 
     for(int j = k ; j > 0 ; j--){ 
      if(input2[j] > input2[j-1]){ 
       temp2 = input2[j]; 
       input2[j] = input2[j-1]; 
       input2[j-1] = temp2; 

      } 
     } 
    } 

    return input2; 
} 

}

출력 :

Original input: [99, 98, 96, 92, 90, 89, 76, 75, 73, 64, 63, 63, 51, 
       48, 36, 36, 32, 32, 30, 4] 

최고 최저 행 :

99, 98, 96, 92, 90, 89, 76, 75, 73, 64, 63, 63, 51, 48, 36, 36, 32, 32, 30, 4, 

높은 순 :

4,30,32,32,36,36,48,51,63,63,64,73,75,76,89,90,92,96,98,99 

답변

1

좋은 소식 : 알고리즘이 잘 작동합니다.

Java에서 배열은 값이 아닌 참조로 전달됩니다. 즉, int[] arr2 = doInsertionSort(arr1);을 설정하면 배열 arr2doInsertionSort 메서드의 결과로 설정되며,이 배열은 정렬 후 input 매개 변수를 반환합니다. 기본적으로 arr1, arr2, arr3, inputinput2은 모두 매우 동일한 배열을 가리 킵니다.

당신은 인쇄하고 있다는 사실 수정이 쉽게 가지 옵션이 있습니다 :

  1. 재구성 main()을 그래서 당신은 하나 개의 배열을 사용하는 것이 : 다시 그 내용을 인쇄 정렬이 가장 낮은 가장 높은 것으로, 그 내용을 인쇄, 가장 높은 것으로부터 가장 낮은 것으로 정렬 한 다음 내용을 다시 인쇄하십시오. (이것이 교과 과정 인 경우 강사가하고자하는 일일 것입니다.)

  2. 조작 할 input 매개 변수의 사본을 만드십시오. 당신과 같이 System.arraycopy()으로이 작업을 수행 할 수 있습니다

    int[] myArray; System.arraycopy(input, 0, myArray, 0, input.length);

    그런 다음, 옵션 2, 당신은 당신이 input 사용하는 다른 모든 시간을 myArray 대신 input를 사용하도록 방법을 수정해야합니다.

참고로, 당신은 당신의 변수 그냥 같은 i, jk이 범위를 벗어나 가서 for 루프, 당신의 변수의 종료 후 잊혀 등 input2, temp2를 호출 할 필요가 없습니다 inputtemp은 신고 한 블록 외부에 아무 것도 의미하지 않습니다.

희망이 있습니다.

0

배열이 변경 가능하기 때문에 동일한 결과가 나타납니다. 다음 코드 때문에 입력 배열이 변형되고 최종 값이 인쇄됩니다 (가장 높은 값부터 가장 낮은 값까지).

int[] arr2 = doInsertionSort(arr1); 

int[] arr3 = doInsertionSortAgain(arr1); 

정리하면 같은 코드 :

public static void main(String a[]) { 
int[] arr1 = {51, 63, 48, 98, 75, 63, 92, 30, 32, 32, 36, 89, 4, 76, 73, 90, 64, 99, 36, 96}; 

System.out.println("Original input: " + Arrays.toString(arr1) + "\n"); 
System.out.println("Lowest to highest:\n"); 

int[] arr2 = doInsertionSort(arr1); 


for (int i : arr2) { 
    System.out.print(i); 
    System.out.print(", "); 

} 
System.out.println("\n\n"); 
System.out.println("Highest to lowest:\n"); 

int[] arr3 = doInsertionSortAgain(arr1); 

for (int k : arr3) { 
    System.out.print(k); 
    System.out.print(", "); 

} 
System.out.println("\n"); 

가}

당신이 얻을거야 :

원래 입력 : 51, 63, 48, 98, 75, 63, 92, 30, 32, 32, 36, 89, 4, 76,73,90,64,99,36,96]

최저에서 최고까지 : 4, 30, 32, 36, 36, 48, 51, 63, 63, 64, 73, 75, 76, 98, 99,

최고 최저 행 : 99, 98, 96, 92, 90, 89, 76, 75, 73, 64, 63, 63, 51, 48, 36, 36, 32, 32, 30, 4,