본문 바로가기

전체 글140

알고리즘 - 퀵 정렬(Quick Sort) 단순 비교를 이용한 정렬을 수행. 분할 정복 알고리즘의 일종으로 엄청 빠름. 이후 나올 합병정렬(Merge Sort)와는 다르게 '비균등'하게 분할한다. 1. 기준점,피벗(Pivot)을 고른다. 2. 피벗을 기준으로 작은건 왼쪽, 큰건 오른쪽으로 전부 옮긴다. 3. 피벗을 제외하고 분할된 왼쪽 리스트, 오른쪽 리스트에 대해 각각 1~2를 반복. 4. 리스트가 더 안쪼개질때까지 반복(리스트 크기가 0이나 1이 될 때) 5. 끝내면 완성! 기본 연산. 분할 : 피벗을 기준으로 입력 배열(리스트)를 2개로 나눔. 정복 : 분할된 배열을 정렬. 배열이 크면 순환호출을 이용해 다시 분할. 결합 : 정렬이 끝난 부분 배열을 하나의 배열로 합친다. 장점 : 속도가 빠름. 정렬 알고리즘 중 최고속. 추가 메모리 공간이.. 2020. 3. 11.
알고리즘 - 버블 정렬(Bubble Sort) 서로 붙은 두 요소를 비교해 정렬. 앞에서부터 순차적으로 비교해서 교환하며 맞는 위치까지 계속 이동. 자연스레 기준에 따라 오름차순이면 큰 수가 끝쪽으로, 작은 수가 앞쪽으로 이동됨. 장점 : 구현이 간단. 비교-교환 만 구현하면 됨. 단점 : 불필요한 교환이 발생함. 이미 맞는 위치임에도 교환되거나, 많은 비교및 교환이 일어남. 성능 구데기 구현때문이면 차라리 삽입정렬이나 선택정렬을 쓰자 2020. 3. 11.
알고리즘 - 삽입 정렬(Insertion Sort) 카드 정렬 방식으로 자료를 정렬. 정렬할 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열과 비교하여, 자신의 위치를 찾아 '삽입' 1. 배열의 두번째 요소부터 정렬을 시작. 2. 선택한 요소의 왼쪽의 모든 요소와 비교하여 위치를 찾아 '삽입' 3. 배열의 마지막 요소까지 진행하면 끝. 장점 : 안정적. 대부분 정렬된 배열에 대해서는 효율적인 정렬. 요소가 적으면 유리. 단점 : 비교적 많은 요소의 이동이 포함됨. 요소 수가 많고 크기가 크면 적합하지 않음. 2020. 3. 11.
알고리즘 - 선택 정렬(Selection Sort) 가장 기초적인 정렬 알고리즘. 정렬 위치에 따라 어떤 값을 넣을지 '선택' 하는 알고리즘. 배열 or 리스트 를 사용하며 추가적인 메모리가 필요하지 않은 정렬방법. 1. 주어진 배열 중 최솟값을 찾음. 2. 그 값을 맨 앞의 요소로 교체 3. 두번째 위치부터 반복. 4. 맨 끝 하나의 요소만 남을 때까지 1~3을 반복. 요소 하나를 '선택' 해서 정렬되지 않은 모든 요소와 비교하며 맞는 정렬위치를 찾아가는 정렬 방법. 알고리즘이 순환하는 시기마다 1회차에는 가장 작은 요소, 2회차에는 두번째로 작은 요소를 '선택'해 나머지와 비교한다. 장점 : 반복회수가 미리 결정. 단점 : 안전성이 만족되지 않는다. 같은 값의 요소가 있다면 상대적인 위치가 변경될 수 있다. 2020. 3. 11.