ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 배열 정렬하기 : 오름차순, 내림차순
    Java/유틸 2024. 9. 17. 16:52
    반응형

    자바에서는 배열을 정렬하는 다양한 방법이 있습니다. 이번 문서에서는 Arrays.sort, Arrays.parallelSort 메서드 등을 사용하여 배열을 오름차순 및 내림차순으로 정렬하는 방법을 기본과 병렬 방식으로 구분하여 설명하겠습니다.

     

    1. 정수 배열을 오름차순 정렬

    Arrays.sort 메서드를 사용하여 정수 배열을 오름차순으로 정렬합니다.

    /**
     * Arrays.sort 메소드를 사용하여 배열을 오름차순으로 정렬
     *
     * @param arr 정렬할 배열
     * @return 정렬된 배열
     */
    public int[] arraySortAscending(int[] arr) {
      Arrays.sort(arr);
      return arr;
    }

    단위 테스트

    @Order(1)
    @DisplayName("arraySortAscending: 정수 배열을 오름차순으로 정렬")
    @Test
    void testArraySortAscendingForIntArray() {
    
      // given
      int[] arr = {5, 3, 8, 1, 9};
    
      // when
      int[] result = arraySort.arraySortAscending(arr);
    
      // then
      int[] expected = {1, 3, 5, 8, 9};
      assertArrayEquals(expected, result);
    }

     

    2. 정수 배열을 내림차순 정렬

    Arrays.sort와 Comparator.reverseOrder를 사용하여 정수 배열을 내림차순으로 정렬합니다.

    /**
     * Arrays.sort 메소드를 사용하여 배열을 내림차순으로 정렬
     *
     * @param arr 정렬할 배열
     * @return 정렬된 배열
     */
    public int[] arraySortDescending(int[] arr) {
    
      // 원시형 배열을 래퍼 클래스 배열로 변환
      Integer[] boxedArr = Arrays.stream(arr)
          .boxed()
          .toArray(Integer[]::new);
    
      // 내림차순 정렬
      Arrays.sort(boxedArr, Comparator.reverseOrder());
    
      // 래퍼 클래스 배열을 원시형 배열로 변환
      return Arrays.stream(boxedArr)
          .mapToInt(Integer::intValue)
          .toArray();
    }

    단위 테스트

    @Order(2)
    @DisplayName("arraySortDescending: 정수 배열을 내림차순으로 정렬")
    @Test
    void testArraySortDescendingForIntArray() {
    
      // given
      int[] arr = {5, 3, 8, 1, 9};
    
      // when
      int[] result = arraySort.arraySortDescending(arr);
    
      // then
      int[] expected = {9, 8, 5, 3, 1};
      assertArrayEquals(expected, result);
    }

     

    3. 정수 배열을 병렬로 오름차순 정렬

    Arrays.parallelSort 메서드를 사용하여 정수 배열을 병렬로 오름차순 정렬합니다.

    /**
     * Arrays.parallelSort 메소드를 사용하여 배열을 병렬로 오름차순 정렬
     *
     * @param arr 정렬할 배열
     * @return 정렬된 배열
     */
    public int[] parallelSortAscending(int[] arr) {
      Arrays.parallelSort(arr);
      return arr;
    }

    단위 테스트

    @Order(3)
    @DisplayName("parallelSortAscending: 정수 배열을 병렬로 오름차순 정렬")
    @Test
    void testParallelSortAscendingForIntArray() {
    
      // given
      int[] arr = {5, 3, 8, 1, 9};
    
      // when
      int[] result = arraySort.parallelSortAscending(arr);
    
      // then
      int[] expected = {1, 3, 5, 8, 9};
      assertArrayEquals(expected, result);
    }

     

    4. 정수 배열을 병렬로 내림차순 정렬

    Arrays.parallelSort와 Comparator.reverseOrder를 사용하여 정수 배열을 병렬로 내림차순 정렬합니다.

    /**
     * Arrays.parallelSort 메소드를 사용하여 배열을 병렬로 내림차순 정렬
     *
     * @param arr 정렬할 배열
     * @return 정렬된 배열
     */
    public int[] parallelSortDescending(int[] arr) {
    
      // 원시형 배열을 래퍼 클래스 배열로 변환
      Integer[] boxedArr = Arrays.stream(arr)
          .boxed()
          .toArray(Integer[]::new);
    
      // 내림차순 정렬
      Arrays.parallelSort(boxedArr, Comparator.reverseOrder());
    
      // 래퍼 클래스 배열을 원시형 배열로 변환
      return Arrays.stream(boxedArr)
          .mapToInt(Integer::intValue)
          .toArray();
    }

    단위 테스트

    @Order(4)
    @DisplayName("parallelSortDescending: 정수 배열을 병렬로 내림차순 정렬")
    @Test
    void testParallelSortDescendingForIntArray() {
    
      // given
      int[] arr = {5, 3, 8, 1, 9};
    
      // when
      int[] result = arraySort.parallelSortDescending(arr);
    
      // then
      int[] expected = {9, 8, 5, 3, 1};
      assertArrayEquals(expected, result);
    }

     

    5. 문자열 배열을 오름차순 정렬

    Arrays.sort 메서드를 사용하여 문자열 배열을 오름차순으로 정렬합니다.

    /**
     * Arrays.sort 메소드를 사용하여 문자열 배열을 오름차순으로 정렬
     *
     * @param arr 정렬할 배열
     * @return 정렬된 배열
     */
    public String[] arraySortAscending(String[] arr) {
      Arrays.sort(arr);
      return arr;
    }

    단위 테스트

    @Order(5)
    @DisplayName("arraySortAscending: 문자열 배열을 오름차순으로 정렬")
    @Test
    void testArraySortAscendingForStringArray() {
    
      // given
      String[] arr = {"Java", "Python", "C++", "JavaScript", "Ruby"};
    
      // when
      String[] result = arraySort.arraySortAscending(arr);
    
      // then
      String[] expected = {"C++", "Java", "JavaScript", "Python", "Ruby"};
      assertArrayEquals(expected, result);
    }

     

    6. 문자열 배열을 내림차순 정렬

    Arrays.sort와 Comparator.reverseOrder를 사용하여 문자열 배열을 내림차순으로 정렬합니다.

    /**
     * Arrays.sort 메소드를 사용하여 문자열 배열을 내림차순으로 정렬
     *
     * @param arr 정렬할 배열
     * @return 정렬된 배열
     */
    public String[] arraySortDescending(String[] arr) {
      Arrays.sort(arr, Comparator.reverseOrder());
      return arr;
    }

    단위 테스트

    @Order(6)
    @DisplayName("arraySortDescending: 문자열 배열을 내림차순으로 정렬")
    @Test
    void testArraySortDescendingForStringArray() {
    
      // given
      String[] arr = {"Java", "Python", "C++", "JavaScript", "Ruby"};
    
      // when
      String[] result = arraySort.arraySortDescending(arr);
    
      // then
      String[] expected = {"Ruby", "Python", "JavaScript", "Java", "C++"};
      assertArrayEquals(expected, result);
    }

     

    7. 문자열 배열을 병렬로 오름차순 정렬

    Arrays.parallelSort 메서드를 사용하여 문자열 배열을 병렬로 오름차순 정렬합니다.

    /**
     * Arrays.parallelSort 메소드를 사용하여 문자열 배열을 병렬로 오름차순 정렬
     *
     * @param arr 정렬할 배열
     * @return 정렬된 배열
     */
    public String[] parallelSortAscending(String[] arr) {
      Arrays.parallelSort(arr);
      return arr;
    }

    단위 테스트

    @Order(7)
    @DisplayName("parallelSortAscending: 문자열 배열을 병렬로 오름차순 정렬")
    @Test
    void testParallelSortAscendingForStringArray() {
    
      // given
      String[] arr = {"Java", "Python", "C++", "JavaScript", "Ruby"};
    
      // when
      String[] result = arraySort.parallelSortAscending(arr);
    
      // then
      String[] expected = {"C++", "Java", "JavaScript", "Python", "Ruby"};
      assertArrayEquals(expected, result);
    }

     

    8. 문자열 배열을 병렬로 내림차순 정렬

    Arrays.parallelSort와 Comparator.reverseOrder를 사용하여 문자열 배열을 병렬로 내림차순 정렬합니다.

    /**
     * Arrays.parallelSort 메소드를 사용하여 문자열 배열을 병렬로 내림차순 정렬
     *
     * @param arr 정렬할 배열
     * @return 정렬된 배열
     */
    public String[] parallelSortDescending(String[] arr) {
      Arrays.parallelSort(arr, Comparator.reverseOrder());
      return arr;
    }

    단위 테스트

    @Order(8)
    @DisplayName("parallelSortDescending: 문자열 배열을 병렬로 내림차순으로 정렬")
    @Test
    void testParallelSortDescendingForStringArray() {
    
      // given
      String[] arr = {"Java", "Python", "C++", "JavaScript", "Ruby"};
    
      // when
      String[] result = arraySort.parallelSortDescending(arr);
    
      // then
      String[] expected = {"Ruby", "Python", "JavaScript", "Java", "C++"};
      assertArrayEquals(expected, result);
    }

     

    장단점

    장점

    - 간단함: Arrays.sort 메서드는 매우 직관적이고 이해하기 쉽습니다.

    - 성능: Arrays.parallelSort는 병렬 처리를 통해 대용량 데이터에서 성능을 향상시킬 수 있습니다.

    단점

    - 복잡성: 병렬 정렬(특히 내림차순 정렬)은 코드가 더 복잡해질 수 있습니다.
    - 오버헤드: 병렬 처리는 특정 상황에서 성능 오버헤드를 초래할 수 있습니다.


    결론

    결론적으로, 자바에서 배열을 정렬하는 방법은 Arrays.sort와 Arrays.parallelSort 메서드를 통해 용이하게 구현할 수 있습니다.

     

    소스 코드는 Github Repository- https://github.com/tychejin1218/blog/tree/main/java-util 프로젝트를 참조하세요.

    반응형

    'Java > 유틸' 카테고리의 다른 글

    [JAVA] 배열의 중복 요소 제거하기  (2) 2024.09.17
    [JAVA] 배열 회전하기  (1) 2024.09.17
    [JAVA] 배열의 합 구하기  (1) 2024.09.17
    [JAVA] 배열 검색하기  (0) 2024.09.17

    댓글

Designed by Tistory.