Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- Top-down
- 관계형 데이터베이스
- 소프트스퀘어드
- 보텀업
- 작동순서
- 알고리즘
- 그리디
- ERD 설계
- hasNext
- 플로이드워셜
- quickDBD
- 순차탐색
- ERD Tool
- 퀵 정렬 # quciksort # 정렬
- 탑다운
- EOF
- Python
- MySQL
- java
- 백준
- greedy
- DynamicProgramming
- 다이나믹프로그래밍
- binarysearch
- Algorithm
- 탐색
- 라이징캠프
- 이것이 취업을 위한 코딩 테스트다
- binary_search
- charAt
Archives
- Today
- Total
Seok_In
[Java] 병합정렬 알고리즘 본문
병합정렬은 nlogn의 시간복잡도를 가진다. 1초 기준 100,000의 범위까지 정렬가능
public static void mergeSort(int arr[]){
sorted[] = new int[arr.length];
mergeSort(arr, 0, arr.length-1);
sorted = null;
}
// 왼쪽 오른쪽 나누기
public static void mergeSort(int arr[], int left, int right){
// 같으면 return
if(left==right) return;
int mid = (left+right)/2;
mergeSort(arr,left,mid);
mergeSort(arr,mid+1,right);
merge(arr,left,mid,right);
}
public static void merge(int arr[], int left, int mid, int right){
int l = left;
int r = mid+1;
int idx = left;
// 왼쪽이든 오른쪽이든 범위 내에 있음
while(l <= mid && r<=right){
if(arr[l]<=arr[r]){
sorted[idx] = arr[l];
idx++;
l++;
}
else{
sorted[idx] = arr[r];
idx++;
r++;
}
}
// 왼쪽을 다 쓰고 오른쪽만 남은경우
if(l > mid){
while(r <= right){
sorted[idx] = arr[r];
idx++;
r++;
}
}
// 오른쪽을 다 쓰고 왼쪽만 남은경우
else{
while(l<=mid){
sorted[idx]=arr[l];
idx++;
l++;
}
}
// 배열을 초기화
for(int i=left;i<=right;i++){
arr[i]=sorted[i];
}
}
'Java' 카테고리의 다른 글
[JAVA] 시간복잡도와 공간복잡도 정리(코테용) (0) | 2022.09.12 |
---|