본문 바로가기

Java

[자바 이클립스] 병합정렬

반응형

전체 원소를 분할하여 정렬한 뒤 병합하는 방식

 

1. 정렬할 데이터 집합을 절반으로 나눈다(재귀 - 하위 데이터(leaf) 크기가 1일 때 까지)

 

2. 하위 데이터 2개를 정렬하고 병합한다

 

* O(nlogn)의 시간 복잡도를 가진다.

* O(n) 크기의 임시 배열 공간이 필요하다.

 

	private static void mergeSort(int[] arr) {
		int[] tmp = new int[arr.length]; // 임시저장공간
		mergeSort(arr, tmp, 0, arr.length -1); // 재귀, start=0 end=arr.length-1
	}
	
	private static void mergeSort(int[] arr, int[] tmp, int start, int end) { // 배열, 임시저장, 시작, 끝 
		
		if(start<end) { // start와 end는 처음과 끝 값을 대표하는 인자 
			
			int mid = (start + end) / 2; 
			System.out.println("여기 0"+","+start+","+mid+","+end); 
			
			mergeSort(arr, tmp, start, mid); 
			// mid가 0까지 작아져 다음 코드로 넘어감 
			// mergeSort 안에 mergeSort 가 속해있는 개념으로 사이클이 돈다.. 
			System.out.println("전반부"+","+start+","+mid+","+end); 
			
			mergeSort(arr, tmp, mid+1, end);
			System.out.println("후반부"+","+start+","+mid+","+end); 
			
			merge(arr, tmp, start, mid, end);
			System.out.println("합침"+","+start+","+mid+","+end); 
			System.out.println();
		
		}
반응형

'Java' 카테고리의 다른 글

오버로딩과 오버라이딩 차이  (0) 2022.01.20
함수와 메소드의 차이  (0) 2021.01.10
함수(Function) vs 메소드(Method)  (0) 2020.12.17
[자바 intellij] 설치  (0) 2020.11.12
[자바 이클립스] 퀵 정렬  (0) 2020.06.13