IT/관련지식

선택&삽입&버블 정렬

금마s 2020. 7. 24. 14:02

# 코드 및 logic

public class sort {
   public static void main(String[] args) {
      int[] input = { 5, 3, 2, 5, 6, 7, 1, 32, 67, 434, 995 };

      print("input", input);

//      주석 단축키 ctrl + /

//      selection(input);

//      insertion(input);

      bubble(input);

   }

   /**
    * logic
    * 1. 정렬되지 않은 인덱스의 맨 앞에서부터, 이를 포함한 그 이후의 배열값 중 가장 작은 값을 찾아간다
    * (정렬되지 않은 인덱스의 맨 앞은, 초기 입력에서는 배열의 시작위치일 것이다.)
    * 2. 가장 작은 값을 찾으면, 그 값을 현재 인덱스의 값과 바꿔준다.
    * 3. 다음 인덱스에서 위 과정을 반복해준다.
    * 
    */
   private static void selection(int[] input) {
      for (int i = 0; i < input.length - 1; i++) {
         int a = i;
         for (int j = i + 1; j < input.length; j++) {
            if (input[j] < input[a]) {
               a = j;
            }
         }
         int tmp = input[i];
         input[i] = input[a];
         input[a] = tmp;

      }
      print("selection", input);
   }
   /***
    * logic
    * 1. 삽입 정렬은 두 번째 인덱스부터 시작한다. 현재 인덱스는 별도의 변수에 저장해주고,
         비교 인덱스를 현재 인덱스 -1로 잡는다.
    * 2. 별도로 저장해 둔 삽입을 위한 변수와, 비교 인덱스의 배열 값을 비교한다.
    * 3. 삽입 변수의 값이 더 작으면 현재 인덱스로 비교 인덱스의 값을 저장해주고,
         비교 인덱스를 -1하여 비교를 반복한다.
    * 4. 만약 삽입변수가 더 크면, 비교 인덱스 +1에 삽입 변수를 저장한다.
    * 
    */
   private static void insertion(int[] input) {
      for (int i = 1; i < input.length; i++) {
         int tmp = input[i];
         int index = i - 1;
         while (index >= 0 && tmp < input[index]) {
            int a = input[index + 1];
            input[index + 1] = input[index];
            input[index] = tmp;
            index--;
         }
      }
      print("insertion", input);
   }

   /**
    * logic
    * 1. 버블 정렬은 두 번째 인덱스부터 시작한다. 현재 인덱스 값과, 바로 이전의 인덱스 값을 비교한다.
    * 2. 만약 이전의 인덱스가 더 크면, 현재 인덱스와 바꿔준다.
    * 3. 현재 인덱스가 더 크면, 교환하지 않고 다음 두 연속된 배열값을 비교한다.
    * 4. 이를 (전체 배열의 크기 - 현재까지 순환한 바퀴 수) 만큼 반복한다.
    */
   private static void bubble(int[] input) {
      for (int i = 0; i < input.length; i++) {
         for (int j = 0; j < input.length - i - 1; j++) {
            if (input[j] > input[j + 1]) {
               int tmp = input[j];
               input[j] = input[j + 1];
               input[j + 1] = tmp;
            }
         }
      }
      print("bubble", input);
   }

   private static void print(String str, int[] arr) {
      System.out.print(" " + str + " \n>> ");
      for (int tmp : arr) {
         System.out.print(tmp + " ");
      }
      System.out.println("\n");
   }

}

 

 

 

 

 

 

728x90

'IT > 관련지식' 카테고리의 다른 글

DRM 흐름  (0) 2020.07.24
릴리즈 노트  (0) 2020.07.24
정규화  (0) 2020.07.24
네트워크 프로토콜  (0) 2020.07.23
네트워크 개요  (0) 2020.07.23