package practice; import java.util.*; // SWEA, 1952, ììì¥ public class Main4 { // O(n^2) // ìì ê³¼ ê·¸ ë¤ì ì를 ë¹êµí´ ê·¸ ë¤ì ìê° ë ìì¼ë©´ ì¼ìª½ì¼ë¡ ì®ê¸°ê³ ìì ì ì¤ë¥¸ìª½ì¼ë¡ ì®ê¸´ë¤. ì´ ê³¼ì n - 1ë² ë°ë³µ static void bubble(int a[]) { for (int i = a.length; i > 0; i--) { for (int j = 0; j < i - 1; j++) { if (a[j] > a[j + 1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } } // O(n^2) // ë°°ì´ì ë¤ ëê³ ê°ì¥ í° ê°ì ë§ì§ë§ì ìì¹, ê·¸ ì´í ë°°ì´ì í¬ê¸°ë¥¼ ììì§ ìíìì 0ë¶í° ëê¹ì§ ëê³ ê·¸ ë¤ì ìì¹ì ìì¹ìí´ static void selection(int a[]) { int max; int n; for (int i = a.length - 1; i >= 0; i--) { max = (int) -1e9; n = 0; for (int j = 0; j <= i; j++) { if (max < a[j]) { max = a[j]; n = j; } } int temp = a[i]; a[i] = a[n]; a[n] = temp; } } // O(n^2) // 1ë¶í° ëê¹ì§ íë² ëëë°, ê·¸ ê° ê¸°ì¤ì¼ë¡ ì¼ìª½ì ìë ë°°ì´ì ê°ë¤ì ë¹êµí´ 기ì¤ë³´ë¤ ìì¼ë©´ íëì© ì¤ë¥¸ìª½ì¼ë¡ ì®ê²¨ê°. insertion // sortë íì ê¸°ì¤ ì¼ìª½ì ì ë ¬ëì´ ìë ìí // http://marobiana.tistory.com/85 static void insertion(int[] a) { // 1ë¶í° ìì for (int i = 1; i < a.length; i++) { int standard = a[i]; // ê¸°ì¤ int n = i - 1; // ë¹êµí ëì while (n >= 0 && standard < a[n]) { a[n + 1] = a[n]; // ë¹êµëìì´ í° ê²½ì° ì¤ë¥¸ìª½ì¼ë¡ ë°ì´ë n--; } a[n + 1] = standard; // ê¸°ì¤ } } // O(nlogn) // í¼ë² ê°ì´ë° ì¡ê³ ì¼ìª½ì ê·¸ê²ë³´ë¤ ììê°, ì¤ë¥¸ìª½ì ê·¸ê² ë³´ë¤ í° ê° ì ë ¬. left : ì²ìë¶í° í¼ë² ì ê¹ì§, right : í¼ë²ì´íë¶í° ë§ì§ë§ê¹ì§ ì¬ê· ë림 // ìµì ì ê²½ì°ë ê¸°ì¤ ììê° ê°ì¥ í° ê° ëë ê°ì¥ ìì ê°ì¼ ê²½ì° static void quick(int[] a, int left, int right) { int l = left; int r = right; int pivot = a[(left + right) / 2]; while (l <= r) { while (a[l] < pivot) { l++; } while (a[r] > pivot) { r--; } if (l <= r) { int temp = a[l]; a[l] = a[r]; a[r] = temp; l++; r--; } } if (left < r) { quick(a, left, r); } if (right > l) { quick(a, l, right); } } // O(nlogn) // http://zeddios.tistory.com/38 static void mergeSort(int arr[], int left, int right) { if (left < right) { int mid = (left + right) / 2; mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right); merge(arr, left, mid, right); } } // ì ë ¬ë ë ë°°ì´(arr[l..mid]), (arr[mid+1..r])를 í©ë³íë¤. // ì ë ¬ë íëì ë°°ì´(arr[l..r])ì ëì¶íë¤. static void merge(int arr[], int left, int mid, int right) { int i = left; int j = mid + 1; int k = left; int temp[] = new int[arr.length]; while (i <= mid && j <= right) { if (arr[i] < arr[j]) { temp[k++] = arr[i++]; } else { temp[k++] = arr[j++]; } } // ì¼ìª½ ë°°ì´ì ë머ì§ë¤ while (i <= mid) { temp[k++] = arr[i++]; } // ì¤ë¥¸ìª½ ë°°ì´ì ë머ì§ë¤ while (j <= right) { temp[k++] = arr[j++]; } for (int index = left; index < k; index++) { arr[index] = temp[index]; } } public static void main(String[] args) { int a[] = { 10, -1, 4, 6, 5, 9, 220, 0, -47, 5 }; // bubble(a); // selection(a); // insertion(a); // quick(a, 0, a.length - 1); mergeSort(a, 0, a.length - 1); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } }