Java
[Java] 병합정렬 알고리즘
Seok_IN
2022. 9. 12. 17:20
병합정렬은 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];
}
}