[백준] 2750 수 정렬하기

문제


N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

입력


첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

공통 코드

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        int[] list = new int[num];
        for (int i=0; i<num; i++) {
            list[i] = scanner.nextInt();
        }
        // 정렬 코드
        for (int i=0; i<num; i++) {
    System.out.println(list[i]);
}

정렬 방식

1. 선택 정렬

  • 시간 복잡도: O(n^2)
  • 가장 많이 봤던 정렬 코드
  • 코드
    for (int i=0; i<num-1; i++) {
        for (int j=i+1; j<num; j++) {
            if (list[i] > list[j]) {
                int temp = list[i];
                list[i] = list[j];
                list[j] = temp;
            }
        }
    }
    
  • 결과

2. 삽입정렬

  • 정렬되어 있는 부분에 새로운 레코드를 올바른 위치에 삽입하는 과정을 반복하는 정렬
  • 코드
    for(int i=0; i<num; i++) {
                for (int j=i; j>0; j--) {
                    if (list[j] < list[j-1]) {
                        int temp = list[j];
                        list[j] = list[j-1];
                        list[j-1] = temp;
                    } else break;
                }
            }
    
  • 결과

  • 경우
    1) 최선의 경우: 이미 정렬이 되어 있는 경우 시간복잡도 O(n)
    2) 최악의 경우: 역순으로 정렬 되어 있는 경우 시간복잡도 O(n^2)
    3) 평균의 경우: O(n^2)

3. 퀵 정렬

  • 평균적으로 가장 빠른 정렬 방식
  • 분할정복법 사용
  • 과정
    피벗을 기준으로 피벗의 값보다 작은 데이터, 큰 데이터 배열 2개를 부분 리스트로 비균등 분할
  • 코드
     public static void quickSort(int arr[], int start, int end) {
        int pivot = start;
        int left = start+1;
        int right = end;
        if(start>=end) {return;}

        while(left<=right) {
            while(left<=end&&arr[left]<=arr[pivot]) {
                left++;
            }
            while(right>start&&arr[right]>=arr[pivot]) {
                right--;
            }
            if(left>right) {
                int temp = arr[pivot];
                arr[pivot] = arr[right];
                arr[right] = temp;
            }
            else {
                int temp = arr[left];
                arr[left]= arr[right];
                arr[right]=temp;
            }
        }
        quickSort(arr, start, right-1);
        quickSort(arr, right+1,end);
    }
    
  • 결과

4. Arrays.sort

  • 자바가 제공하는 기본 정렬 메소드
Arrays.sort(list);
  • 결과

homebdy
homebdy 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람.
comments powered by Disqus