cs 기본

created : Wed, 28 Sep 2022 17:27:10 +0900
modified : Fri, 30 Sep 2022 19:46:40 +0900
cs

정리 동기

Algorithm

Selection Sort

private static void sort(int[] arr) {
  for (int i = 0; i < arr.length; i ++) {
    int standard = i;
    for (int j = i + 1; j < arr.length; j++) {
      if (arr[j] < arr[standard])
        standard = j;
    }

    int temp = arr[standard];
    arr[standard] = arr[i];
    arr[i] = temp;
  }
}

Bubble Sort

private static void sort(int[] arr) {
  for (int i = 0; i < arr.length; i ++) {
    for (int j = 0; j < arr.length - i - 1; j ++) {
      if (arr[j] > arr[j + 1]) {
        int temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
}

Merge Sort

private static void mergeSort(int[] a, int left, int right) {
  if (left < right) {
    int mid = (left + right) / 2;
    mergeSort(a, left, mid);
    mergeSort(a, mid + 1, right);
    merge(a, left, mid, right);
  }
}

private static void merge(int[] a, int left, int mid, int right) {
  int i, j, k;
  i = left;
  j = (mid + 1);
  k = 0;
  int[] sorted = new(int[], right - left + 1);
  while (i <= mid && j <= right) {
    if (a[i] < a[j]) sorted[k++] = a[i++];
    else sorted[k++] = a[j++];
  }
  while (i <= mid) {
    sorted[k++] = a[i++];
  }
  while (j <= right) {
    sorted[k++] = a[j++];
  }
  for (k = 0; i < right - left + 1; i ++) {
    a[left + k] = sorted[k];
  }
}

Insertion Sort

private static void sort(int[] arr) {
  for (int i = 1; i < arr.length; i ++) {
    int standard = arr[i];
    int idx = i - 1;
    while (0 <= idx && standard < arr[idx]) {
      arr[idx + 1] = arr[idx];
      idx --;
    }
    arr[idx + 1] = standard;
  }
}

Quick Sort

private static void quickSort(int[] arr, int left, int right) {
  int L = left;
  int R = right;
  int pivot = arr[(left + right) / 2];
  while (L <= R) {
    while (arr[L] < pivot) L ++;
    while (pivot < arr[R]) R --;
    if (L <= R) {
      if (L != R) {
        swap(arr, L, R);
      }
      L ++;
      R --;
    }
    if (left < R) quickSort(arr, left, R);
    if (L < right) quickSort(arr, L, right);
  }
}

Heap Sort

private static void heapSort(int[] arr) {
  int n = arr.length;
  for (int i = (n / 2) - 1; i >= 0; i --) {
    heapify(arr, n, i);
  }
  for (int i = n - 1; i > 0; i --) {
    swap(arr, 0, i);
    heapify(arr, i, 0);
  }
}

private static void heapify(int[] arr, int n, int i) {
  int p = i;
  int l = i * 2 + 1;
  int r = i * 2 + 2;
  if (l < n && arr[p] < arr[l]) p = l;
  if (r < n && arr[p] < arr[r]) p = r;
  if (i != p) {
    swap(arr, p, i);
    heapify(arr, n, p);
  }
}

LRU Cache (Least Recently Used)

Operating System

프로세스, 쓰레드

Multi Process vs Multi Thread

동기화 문제

Context Switching

Interrupt

Deadlock

CPU Scheduling

Scheduler

Paging vs Segmentation

페이지 교체 알고리즘

Compiler

Lexical Analyzer

Syntax Analyzer

Semantic Analyzer

Immediate Code Generator

Code Optimizer

Code Generator

Design Pattern

디자인 패턴 구조

디자인 패턴 종류