버블
-> 이웃한 데이터끼리 비교하여 가장 큰 수를 계속 뒤로 보내는 정렬
-> 뒤에서부터 정렬이 이루어진다.
삽입
-> 정렬되지 않은 임의의 데이터를 정렬된 데이터와 비교하여 적절한 위치에 삽입하는 정렬
-> 앞에서부터 정렬이 이루어진다.
-> 앞쪽에 정렬된 데이터와 비교를 한다 뒤에서 앞으로 가는 구조
선택
-> 정렬되지 않은 임의의 데이터 중 가장 작은 값을 비교하여 선택하여 가장 앞의 데이터와 위치를 바꿔주는 정렬
-> 앞쪽에서부터 정렬이 이루어진다
분할정복
-> 데이터를 분할정복 알고리즘으로 1/2로 쪼개고
-> 결합하는 과정에서 정렬을 진행한다.
public class SortTest { private static final int[] arr = new int[] {8,5,2,6,9,3,1,4,0,7}; public static void main(String[] args) { // selectionSort(arr.clone()); // insertionSort(arr.clone()); // bubbleSort(arr.clone()); print(arr); mergeSort(arr.clone()); } public static void bubbleSort(int[] arr) { for(int i=0; i < arr.length - 1; i++){ for(int j=1; j < arr.length - i; j++){ if(arr[j-1] > arr[j]) swap(arr, j, j-1); } print(arr); } } public static void selectionSort(int[] arr) { int target = 0; for(int i=0; i<arr.length - 1;i++){ target = i; for(int j=i+1; j <arr.length ; j++){ if(arr[target] >= arr[j]) target = j; } swap(arr, i, target); print(arr); } } public static void insertionSort(int[] arr) { for(int i=1; i<arr.length;i++){ for(int j=0; j<i; j++){ if(arr[j] > arr[i]) swap(arr, i, j); } print(arr); } } public static void mergeSort(int[] arr) { divide(arr, 0, arr.length - 1); } public static void merge(int[] arr, int s, int m, int e) { int[] temp = new int[arr.length]; int i = s; int left = s; int right = m + 1; while(left <= m || right <= e) { if(arr[left] >= arr[right]) { temp[i] = arr[right]; right++; } else { temp[i] = arr[left]; left++; } i++; } for(int j=s;j<=m;j++){ arr[j] = temp[j]; } for(int j=m+1;j<=e;j++){ arr[j] = temp[j]; } print(arr); } public static void divide(int[] arr, int s, int e) { if(s < e){ int middle = (e - s) / 2; System.out.println(s + "," + middle + "," + e); divide(arr, s, middle); divide(arr, middle + 1, e); merge(arr, s, middle, e); } } public static void swap(int[] arr, int i, int j) { int tmp2= 0; tmp2 = arr[j]; arr[j] = arr[i]; arr[i] = tmp2; } public static void print(int[] arr) { for(int j=0; j <arr.length; j++){ System.out.print(arr[j] + " "); } System.out.println(""); } }
'Programming > >> Algorithm' 카테고리의 다른 글
[Lucky Algorithm] Compare the Triplets (0) | 2017.10.03 |
---|---|
[Lucky Algorithm] Simple Array Sum (0) | 2017.10.03 |
[Lucky Algorithm] Mini-Max Sum (0) | 2017.10.03 |
[Lucky Algorithm] Grading Students (0) | 2017.09.27 |
[Lucky Algorithm] 시작 (0) | 2017.09.27 |
댓글