참여 링크 - https://meet.google.com/ytw-nkkt-zzr
정렬이란? 정렬(sorting)은 이름,학번, 키 등 핵심 항목(key)의 대소관계에 따라 데이터 집합을 일정한순서로 줄지어 늘어서도록 바꾸는 작업을 말합니다
가장 단순한 정렬 중 삽입 정렬과 선택 정렬이 있으며 이 둘 모두 낮은 부하로 인해 작은 데이터에 효율적이지만 큰 데이터에는 효율적이지 않다.
실용적인 일반 정렬 알고리즘들은 평균 시간 복잡도(및 일반적으로 최악의 경우의 복잡도) O(n log n)의 알고리즘에 기반한 경우가 대부분이며 그 중 가장 흔한 것이 힙 정렬, 합병 정렬, 퀵 정렬이다
for(int i = 0; i < n - 1 ; i++) { // min = a[i] ~ a[n - 1] 에서 가장 작은 값을 가지는 요소의 인덱스 // a[i] 와 a[min] 의 값을 교환 |
자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘
for (int i =1; i <n; i++) { A[1...last] 중 가장 큰 수 A[k]를 찾는다 A[K] = A[last]; A[k]와 A[last]값을 교환 } |
mergeSort(A[],p,r){ if(p<r) then{ q = (p+r)/2; mergeSort(A,p,q); mergeSort(A,q+1,r); merge(A, p, q, r); } } merge(A[], p, q, r){ 정렬되어 있는 배열 A[p..q]와 A[q+1...r]을 합하여 정렬된 하나의 배열 A[p...r]을 만든다. } |
ref )https://gmlwjd9405.github.io/2018/05/06/algorithm-insertion-sort.html
문자열 검색이란 어떤 문자열 안에 다른 문자열이 들어 있는지 조사하고 들어 있다면 그 위치를 찾아내는 것을 말합니다
이름에서 느껴지듯, 매우 단순무식한 알고리즘 가능한 모든 경우에 대해 모두 직접 해 보는 방법
ex) N : ABCABABCDE , M : CAB
이 과정의 시간 복잡도는 텍스트의 길이를 N, 패턴의 길이를 M이라 할 때 각 텍스트의 인덱스에 대해 패턴이 일치하는지 비교하므로 O(NM)입니다.
KMP 알고리즘을 이용하면 O(N+M)에 문자열 검색을 할 수 있습니다.
KMP알고리즘의 시간 복잡도는 O(N+M)으로 위의 무식한 방법 O(NM) 보다 매우 빠릅니다.
https://bowbowbow.tistory.com/6
기본 예시
https://leetcode.com/problems/sort-colors/
https://leetcode.com/problems/valid-anagram/
문제
https://leetcode.com/problems/relative-sort-array/ (easy)
https://leetcode.com/problems/largest-number/ (medium)
https://leetcode.com/problems/find-and-replace-in-string/ (medium)