본문 바로가기
알고리즘

[알고리즘] [2] 병합 정렬

by Parsler 2024. 1. 14.
import java.util.*;

public class Main {
	static int[] arr;
	static int [] sortedArr;
	static int m;
	static int cnt = 0;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		m = sc.nextInt();
		arr = new int[n];
		sortedArr = new int[n];
		for (int i = 0; i < n; i++) {
			arr[i] = sc.nextInt();
			sortedArr[i] = arr[i];
		}
		mergeSort(0, arr.length - 1);
		
		System.out.println(Arrays.toString(sortedArr));
	}
	
	private static void mergeSort(int stt, int fin) {	
		if (fin > stt) {
			int mid = (stt + fin) / 2;
			mergeSort(stt, mid);
			mergeSort(mid + 1, fin);
			
			int i = stt;
			int j = mid + 1;
			int idx = stt;

			while (i <= mid || j <= fin) {
				if (i == mid + 1) {
					sortedArr[idx] = arr[j];
					j++;
					idx++;
					cnt++;
					continue;
				}
				if (j == fin + 1) {
					sortedArr[idx] = arr[i];
					i++;
					idx++;
					cnt++;
					continue;
				}
				if (arr[i] >= arr[j]) {
					sortedArr[idx] = arr[j];
					j++;
					idx++;
					cnt++;
					continue;
				} else {
					sortedArr[idx] = arr[i];
					i++;
					idx++;
					cnt++;
				}
			}
			for (int k = 0; k < arr.length; k++) {
				arr[k] = sortedArr[k];
			}
		}
	}

}

'알고리즘' 카테고리의 다른 글

[알고리즘] [9] 연결리스트  (0) 2024.02.05
[알고리즘] [8] 부분 집합  (1) 2024.02.01
[알고리즘] [7] 조합  (0) 2024.01.31
[알고리즘] [6] 완전탐색, 순열  (1) 2024.01.30
[알고리즘] [5] 재귀  (0) 2024.01.29
[알고리즘] [4] 문제 해결  (1) 2024.01.29
[알고리즘] [3] BFS  (0) 2024.01.18
[알고리즘] [1] 힙 정렬  (3) 2023.12.04