자바 - 선택정렬

Hyeseong·2023년 5월 20일
0
public class 선택정렬_Ver1 {

  // 두 위치의 원소를 교환
  public static void swap(int[] numbers, int position1, int position2) {
    int temporary = numbers[position1];
    numbers[position1] = numbers[position2];
    numbers[position2] = temporary;
  };

  // 시작 위치부터 가장 작은 원소의 위치 찾기
  public static int findSmallestPosition(int[] numbers, int startFrom) {
    int smallestPosition = startFrom;
    for (int currentIndex = startFrom; currentIndex < numbers.length; currentIndex++) {
      // 현재 위치의 원소가 지금까지 찾은 가장 작은 원소보다 작다면, 그 위치를 저장
      if (numbers[currentIndex] < numbers[smallestPosition]) {
        smallestPosition = currentIndex;
      }
    }
    return smallestPosition;
  }

  // 선택 정렬 알고리즘
  public static void sort(int[] numbers) {
    for (int currentIndex = 0; currentIndex < numbers.length; currentIndex++) {
      // 현재 위치부터 가장 작은 원소의 위치 찾기
      int smallestPosition = findSmallestPosition(numbers, currentIndex);
      // 그 원소와 현재 위치의 원소를 교환
      swap(numbers, currentIndex, smallestPosition);
    }
  }

  // 메인 메소드
  public static void main(String[] args) {
    int[] numbers = { 5, 3, 6, 2, 10, 0, 11 };
    sort(numbers);
    System.out.print("정렬된 배열: ");
    for (int number : numbers) {
      System.out.print(number + " ");
    }
  }
}

설명

라인별

  1. public class 선택정렬_Ver1 {: "선택정렬_Ver1"이라는 클래스를 선언합니다. 이 클래스 안에는 모든 정렬 메서드가 포함됩니다.

  2. public static void swap(int[] numbers, int position1, int position2) {: swap이라는 메소드를 선언합니다. 이 메서드는 배열 numbers의 position1 위치와 position2 위치에 있는 원소들을 서로 바꿉니다.

  3. temporary = numbers[position1];: position1 위치의 원소를 임시 변수 temporary에 저장합니다. 이는 position1 위치에 position2 위치의 원소를 덮어쓰기 전에 position1 위치의 원소를 보존하기 위함입니다.

  4. numbers[position1] = numbers[position2];: position2 위치의 원소를 position1 위치에 덮어씁니다.

  5. numbers[position2] = temporary;: 이전에 보존해둔 temporary(원래 position1 위치의 원소)를 position2 위치에 덮어씁니다.

  6. public static int findSmallestPosition(int[] numbers, int startFrom) {: findSmallestPosition이라는 메서드를 선언합니다. 이 메서드는 배열 numbers의 startFrom 위치부터 시작하여 가장 작은 원소의 위치를 찾아 반환합니다.

  7. for (int currentIndex = startFrom; currentIndex < numbers.length; currentIndex++) {...}: `startFrom 위치부터 배열의 끝까지 순회하면서 가장 작은 원소의 위치를 찾는 루프입니다.

  8. public static void sort(int[] numbers) {: sort라는 메서드를 선언합니다. 이 메서드는 배열 numbers에 선택 정렬을 수행합니다.

  9. for (int currentIndex = 0; currentIndex < numbers.length; currentIndex++) {...}: 배열의 각 위치에 대해 가장 작은 원소를 찾아(findSmallestPosition), 그 위치의 원소와 현재 위치의 원소를 교환합니다(swap).

  10. public static void main(String[] args) {: main 메서드를 선언합니다. 이 메서드는 프로그램의 진입점입니다.

  11. int[] numbers = { 5, 3, 6, 2, 10, 0, 11 };: 정렬할 숫자 배열을 선언하고 초기화합니다.

  12. sort(numbers);: sort 메서드를 호출하여 배열을 정렬합니다

메서드별

  • main(String[] args): 이 메소드는 프로그램의 시작점입니다. 먼저 숫자 배열을 생성하고, sort(numbers)를 호출하여 선택 정렬을 수행하고, 그 후에 정렬된 배열을 출력합니다.

  • sort(int[] numbers): 이 메소드는 선택 정렬 알고리즘을 구현합니다. 배열의 각 위치에 대해 가장 작은 원소의 위치를 찾고(findSmallestPosition), 그 위치의 원소와 현재 위치의 원소를 교환합니다(swap).

  • findSmallestPosition(int[] numbers, int startFrom): 이 메소드는 주어진 시작 위치부터 배열의 가장 작은 원소의 위치를 찾습니다. 이를 위해, 시작 위치부터 배열의 끝까지 각 원소를 확인하고, 가장 작은 원소의 위치를 저장합니다. 메소드는 가장 작은 원소의 위치를 반환합니다.

  • swap(int[] numbers, int position1, int position2): 이 메소드는 배열에서 두 원소의 위치를 교환합니다. position1의 원소와 position2의 원소가 서로 교환되며, 이를 위해 임시 변수가 사용됩니다.

전체적으로 보면, main 메소드는 sort 메소드를 호출하여 배열을 정렬하고, sort 메소드는 findSmallestPosition과 swap 메소드를 사용하여 선택 정렬 알고리즘을 구현합니다. 이 과정은 배열의 각 위치에서 가장 작은 원소를 찾아 앞으로 이동시키는 것을 반복하므로, 최종적으로 배열이 오름차순으로 정렬됩니다.

profile
어제보다 오늘 그리고 오늘 보다 내일...

0개의 댓글