JavaRush /Java Blog /Random-KO /삽입 정렬
Helga
레벨 26

삽입 정렬

Random-KO 그룹에 게시되었습니다
얘들아! 오류를 찾도록 도와주세요! 삽입 정렬 - 1작업은 다음과 같습니다. 이진 검색과 함수를 사용하여 배열의 삽입 정렬을 작성합니다 System.arraycopy. 코드는 다음과 같습니다.
package com.company;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main
        {

    public static void main(String[] args) throws IOException {
        int[] arr = createArray();
        System.out.println(Arrays.toString(arr));
        //int[] arr1 = sortArray(arr);
        int[] arr1 = sortArray1(arr);
        System.out.println(Arrays.toString(arr1));


    }
            // creating array
    public static int[] createArray() throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int[] result = new int[10];
        for (int i = 0; i < result.length; i++)
            result[i] = Integer.parseInt(reader.readLine());
        return result;
    }

            // sorting array (insertions)
    public static int[] sortArray(int[] array) {
          for (int i = 1; i < array.length; i++)
                {
                    int currVal = array[i];
                    int keyPrev = i - 1;
                    while ((keyPrev >= 0)&&(currVal < array[keyPrev]))
                    {
                        array[keyPrev+1] = array[keyPrev];
                        array[keyPrev] = currVal;
                        keyPrev--;
                    }
                }
                return array;
            }

          // sorting array (insertion + binary Search + System.arraycopy)
    public static int[] sortArray1(int[] array) {
        for (int i = 1; i < array.length; i++)
        {
            int currVal = array[i];
            int keyPrev = i - 1;
            int searchResult = Arrays.binarySearch(array, 0, keyPrev, array[i]);
            if ((searchResult >=0))
            {
                System.arraycopy(array, searchResult, array, searchResult+1, keyPrev-searchResult+1);
                array[searchResult]=currVal;
            }
            else
            {
                int sR = Math.abs(searchResult)-1;
                System.arraycopy(array, sR, array, sR+1, keyPrev-sR+1);
                array[sR]=currVal;
            }

        }
        return array;
    }
}
결론은 다음과 같습니다.
[7, 2, 8, 5, 7, 3, 5, 7, 3, 4]
[2, 3, 3, 4, 5, 5, 7, 7, 8, 7]
논리적으로는 작동해야 하지만 실제로는 마지막 요소를 정렬하지 않습니다!
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION