본문 바로가기

전산 기초/알고리즘

[정렬] 큌정렬 (Quick Sort) * 퀵정렬 (Quick Sort) "전체 원소에 대해서 정렬을 수행하지 않는다" - Divide and Conquer (분할 정복) : 재귀적 구현 필요기준값(pivot) 을 중심으로 전체 원소들을 왼쪽 부분집합과 오른쪽 부분집합으로 분할(divide)기준값(pivot) 보다 큰 원소는 배열의 오른쪽, 기준값(pivot) 보다 작은 원소는 배열의 왼쪽으로 이동 - 실행 성능은 선택한 기준값(pivot) 에 의해 결정- 일반적으로 기준값(pivot) 은 전체 원소 중에서 가운데 위치한 원소를 선택 [시간 복잡도] * 최선의 경우, 평균의 경우 : O(nlogn)pivot 에 의해서 원소들이 왼쪽 부분집합과 오른쪽 부분집합으로 정확히 n/2개씩 이등분이 되는 경우가 반복* 최악의 경우 : O(n^2)pivo.. 더보기
[정렬] 합병정렬 (Merge Sort) * 합병정렬 (Merge Sort) "여러 개의 정렬된 자료의 집합을 결합하여 한개의 정렬된 집합으로 만드는 방법 " Divide and Conquer (분할 정복) + Combine (결합) : 재귀적 구현 필요전체 원소들에 대해서 정렬을 수행하지 않고 부분집합으로 분할(divide)하고각 부분집합에 대해서 정렬을 완성(conquer)한 후에 정렬된 부분집합들을 다시 결합(combine) 시간복잡도 : O(nlog(n)) 최악의 경우에도 nlogn을 보장한다. (비교)*(횟수) ※ 오름차순 정렬에 대한 설명.input = [27, 2, 46, 4, 19, 50] 합병정렬은 말 그대로 나누고, 정렬하고, 합치는 과정을 반복하는 정렬 방법이다. 큰 문제를 작은문제로 나누어서 작은 문제부터 해결하면서 점점 .. 더보기
[정렬] 삽입정렬 (Insertion Sort) * 삽입정렬 (Insertion Sort) - 정렬 대상을 두 부분으로 나누어 정렬되지 않은 부분에 있는 데이터를 정렬된 부분의 특정 부분에 삽입해 가면서 정렬을 진행(key 값 을 선택하여 이미 정렬된 숫자 사이에 삽입) [시간복잡도]- 최선의 경우 O(n) [1, 2, 3, 4] 5, 6, 7, 8정렬된 요소들과 정렬되지 않은 요소가 전체적으로 오름차순 정렬을 이루고 있는 경우- 최악의 경우 O(n^2) [5, 6, 7, 8] 4, 3, 2, 1 정렬된 요소의 맨 앞에 있는 값이 정렬되지 않은 요소들의 값보다 항상 크고,정렬되지 않은 요소들의 값이 내림차순인 경우 ※ 오름차순 정렬에 대한 설명.input = [47, 15, 36, 26, 27, 2] 자~ 이제 정렬을 시작합니다!전체 요소들 중 제일 .. 더보기
[정렬] 선택정렬 (Selection Sort) * 선택정렬 (Selection Sort) - 선택을 해서 정렬하는 알고리즘 - 최소선택정렬 : 가장 작은 숫자를 선택(오름차순) - 최대선택정렬 : 가장 큰 숫자를 선택(내림차순) - 개선된 선택 정렬(기존의 선택정렬은 정렬하기 위한 배열이 하나 더 필요함) - 최선, 최악의 경우가 따로 존재하지 않음 - 시간복잡도 O(n^2) ※ 오름차순 정렬에 대한 설명. input = [15, 36, 26, 27, 2, 46] - 정렬되지 않은 요소들의 맨 앞에 있는 요소를 minimum으로 설정한다. - 전체 요소들을 검사하면서 minimum(=15) 보다 작은지 비교한다. - minimum(=15) 보다 작은 숫자 2를 발견하게 되면 'minimum = 2' 로 만들어준다. - 나머지 요소들을 계속 검사하면서.. 더보기
[정렬] 버블정렬 (Bubble Sort) * 버블정렬 (Bubble Sort) - 인접한 두개의 데이터를 비교하면서 정렬- 최선, 최악의 경우가 따로 존재하지 않음- 시간복잡도 O(n^2) ※ 오름차순 정렬에 대한 설명.input = [3, 44, 38, 5, 47, 15] - 다음과 같이 맨 처음의 숫자와 그다음의 숫자를 비교해 둘 중 더 큰 숫자를 오른쪽으로 이동한다.- '3'과 '44' 중 44가 더 크므로 자리이동이 발생하지 않는다. - 다음으로 두번째 숫자인 '44'와 '38'을 비교한 경우 '44'가 더 크므로 오른쪽으로 자리이동이 발생한다. ...- 위처럼 계속해서 좌, 우 숫자를 계속해서 비교하면서 숫자를 정렬시켜 나간다.- 이렇게 한번 모든 모든 숫자를 비교하게 되면 아래 그림처럼 제일 큰 숫자가 맨 뒤에 위치하게 된다. - 이.. 더보기