CS지식/알고리즘

CS지식/알고리즘

선택 정렬(Selection Sort)

개념요소들 중에서 최대/최소값을 찾아 정렬하는 알고리즘입니다.최대값 선택 시 내림차순 정렬을 진행합니다.(최솟값 선택 시 오름차순 정렬) 로직오름차순 정렬을 기준으로 보자면먼저 0~N-1 요소들 중에서 가장 작은 값을 찾고 0번째 인덱스와 교환해줍니다.그다음 정렬된 0번째를 제외한1~N-1 요소 중에서 가장 작은 값을 찾고 1번째 인덱스와 교환해줍니다.이렇게 총 N-2번(마지막 인덱스 탐색 X) 반복하면 정렬이 완료됩니다.추가 메모리 공간이 필요하지 않는 특징이 있습니다. 코드자바로 작성한 선택정렬 코드는 다음과 같습니다.// 선택 정렬: N^2 순회// 오름차순 정렬for (int i = 0; i arr[j]){ minVal = arr[j]; minIdx = j..

CS지식/알고리즘

삽입 정렬(Insertion Sort)

개념정렬을 진행할 원소의 index(a)보다 작은 곳(0~a-1)에 있는 원소들을 탐색하고알맞은 위치에 삽입하여 정렬하는 알고리즘입니다.구현이 간단하다는 특징이 있습니다. 로직오름차순 정렬 기준1~N-1번째 인덱스를 순차적으로 key로 두고key-1 ~ 0의 인덱스를 감소순회하면서만약 arr[현재의 값] > key 라면, arr[현재의 값+1] = arr[현재의 값]을 넣어줍니다.그렇지 않다면, 순회를 종료합니다.순회가 끝나고 난 후, arr[마지막 위치 + 1] = key 값으로 갱신합니다. 코드자바로 작성한 삽입정렬 코드는 다음과 같습니다.// 삽입 정렬: N^2 순회int key, j;for (int i = 1; i = 0 ; j --) { if (arr[j] > key) arr[j+1..

CS지식/알고리즘

버블 정렬(Bubble Sort)

개념서로 인접해 있는 요소 간 대소 비교를 통해 정렬하는 알고리즘입니다. 추가적인 메모리 공간이 필요하지 않다는 특징이 있으며 쉽게 구현할 수 있지만 비효율적인 알고리즘입니다.  인접한 원소를 교환하는 모습이 마치 물 속의 거품과 비슷하다고하여 버블 정렬이라고 부른다고 합니다. 로직예시로 오름차순 정렬을 만든다면arr = [1, 7, 2, 4, 5, 6] N-1개의 요소를 순회하며(0 ~ N-2 인덱스)현재 인덱스에 위치한 값이(a) 다음 인덱스에 위치한 값(b) 보다 클 경우 교환해줍니다.이렇게 첫번째 순회를 마치게 되면 결과는다음과 같이 수열 중 가장 큰 수인 7이 맨 오른쪽으로 정렬된 것을 볼 수 있습니다.arr = [1, 2, 4, 5, 6, 7] 해당 예시는 한 번의 정렬만으로 오름차순 정렬이 ..

CS지식/알고리즘

정렬 알고리즘

정렬 알고리즘 종류요소들을 특정 순서대로 재배치하는 것을 정렬이라고 하며 이런 정렬을 하는 알고리즘의 종류에는 대표적으로 버블, 삽입, 선택, 퀵, 병합, 힙 정렬이 있습니다. 알고리즘 별 시간 복잡도를 먼저 말씀드리자면 다음과 같습니다. 버블, 삽입, 선택: O(N^2)퀵, 병합, 힙: O(N logN) 버블 정렬서로 인접해 있는 요소 간 대소 비교를 통해 정렬하는 알고리즘입니다.추가적인 메모리 공간이 필요하지 않다는 특징이 있으며쉽게 구현할 수 있지만 비효율적인 알고리즘입니다. 인접한 원소를 교환하는 모습이 마치물 속의 거품과 비슷하다고하여 버블 정렬이라고 부른다고 합니다. 시간 복잡도: O(N^2) 버블 정렬에 로직에 대한 자세한 설명 및 코드는 아래의 링크에 있습니다. 버블 정렬(Bubble So..