2017-04-25 4 views
1

다음은 서로 다른 크기의 여러 배열에 삽입하는 insertionSort 메서드를 호출하는 주된 메서드입니다. 이 예제에는 하나의 배열 만 있지만 여러 개가 실행됩니다. arr2를 삽입 정렬처럼 정렬하는 방법을 알 수는 없습니다. arr2의 끝에서 시작하여 arr2의 올바른 위치에 도달 할 때까지 정렬되지 않은 배열을 다시보고 arr2의 끝에 다음 숫자를 놓고 정렬 될 때까지 반복해서 정렬합니다. 이걸로 나를 도울 수 있다면 좋을거야. 그리고 네, 다른 코드를 살펴 봤지만 아무도 저의 문제를 도와주지 못했습니다. 저는 이것을 알아 내려고 일주일을 보냈습니다. 첫째 arr2 수 결코 == sorted에서Java 삽입 정렬

static void insertionSort(int[] arr) { 
    final long startTime = System.nanoTime(); // starts timer 
    System.out.println("Insertion Sort"); 
    //************** Code For Sorting *****************// 
    int[] sorted = Arrays.copyOf(arr, arr.length); // Copies unsorted array to new array 
    Arrays.sort(sorted); // sorts unsorted array for compairison later on 

    int[] arr2 = new int[arr.length]; 
    for(int h = 0; h < arr.length - 1; h++){// makes arr2 all 0's 
     arr2[h] = 0; 
    } 

    arr2[arr2.length - 1] = arr[0]; 
    for(int k = 0; k < arr.length; k++){ 
     System.out.print(arr2[k] + ", "); 
    } 
    System.out.println(); 


    while(arr2 != sorted){ 

     for(int i = 1; i < arr2.length; i++){ 
      if(arr[i] < arr2[arr2.length-1]){ 
       int last = arr2[arr2.length-1]; 
       int before = arr[i]; 
       arr2[arr2.length-1]= before; 
       arr2[arr2.length-2]= last; 

       // CANT FIGURE OUT HOW TO SORT CORRECTLY 
      } 





      for(int k = 0; k < arr.length; k++){ 
       System.out.print(arr2[k] + ", "); 
      } 
      System.out.println(); 
     } 

    } 
    for(int k = 0; k < arr.length; k++){ 
     System.out.print(arr2[k] + ", "); 
    } 
} 
public static void main(String[] args) { 
    int arr[] = {}; // Array that will be put into each sort method 
    //****************Multiple Arrays for testing*******************// 

    /* ************All Arrays Are Whole Numbers 1-100*************** 
    arr1 = Array of size 20 
*************************************************************** */ 
    int arr1[] = {6,3,20,10,11,2,9,1,19,17,4,16,8,15,18,14,5,7,12,13}; // {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20} 
//**************************************************************// 
    int arrayNumber = 1; 
    while(arrayNumber < 2){ 
     if (arrayNumber == 1){ 
      arr = arr1; 
     } 
System.out.println("Array "+ arrayNumber +" Before Sorting"); 
     for(int i = 0; i < arr.length; i++){ 
      System.out.print(arr[i] + ", "); 
     } 
     System.out.println(); 
     //************* Array put into Methods***************// 
insertionSort(arr); 
//***************************************************// 
     arrayNumber++; // Adds 1 to arrayNumber to show next array 
    } 

} 

답변

1

. ==은 두 개의 Object가 동일한 주소를 가지고 있음을 의미합니다. 을 메모리에 넣습니다. 그런 다음 삽입 정렬은 Object 집합을 정렬하고 정렬 된 컬렉션에 저장합니다. insertionSort(int[] arr) 메서드에서 적어도 두 배열이 필요합니다. arr2은 정렬 된 배열입니다. 나누었다 다른 말로하면, 당신은 arr2 = new int[arr.length*2];을 초기화 할 수 있습니다 .and arr[i]>= arr[j] && arr[i]<arr[j+1]은, 인덱스 j는 바로 이곳 경우 당신이 arr2[j]arr[i]을 비교할 때 다음 그냥 arr을 반복 .and 바로 place.the 적절한 장소에 arr[i]를 삽입, 더 많은 공간이 필요합니다. 인덱스 j과 마지막 요소 인 arr2 사이에있는 arr2의 모든 요소를 ​​이동하면 arr2.length-1이 아니라 arr[k]이 아니며 중요한 것은 먼저 arr2[k]을 한 단계 씩 이동해야한다는 것입니다. , arr[k+1]=arr[k];처럼 이제부터는 하나의 객체가 arr2에 삽입되었습니다.