본문 바로가기

Study/Algorithm

(4)
쉘 정렬 (shell sort) 1. 쉘 정렬(Shell sort) : 가장 오래된 정렬 알고리즘의 하나로, 삽입 정렬을 기본으로 삽입 정렬을 보완한 알고리즘이다. 삽입 정렬은 요소들이 삽입될 때, 이웃한 위치로만 이동한다. 즉, 삽입되어야 할 위치가 현재 위치에서 멀리 떨어져있다면 여러번의 이동을 거쳐야만 제자리로 갈 수 있다. 이러한 점을 보완한 알고리즘이 쉘 정렬이다. 정렬해야 할 리스트의 각 k번째 요소를 추출해서 부분 리스트 생성, 이때 k를 간격(gap)이라고 한다. 간격의 초기값은 보통 2로 나눈 값으로 진행하는데, 3으로 나눈 후 1을 더하는 경우가 더 빠르다고 알려져있다. 즉, N/2 보다 (N/3) + 1이 더 빠르다는 얘기이다. 각 회전마다 간격 k를 절반으로 줄인다. 즉, 각 회전이 반복될 때마다 하나의 부분 리스..
기본 정렬 - 삽입 정렬 (insertion sort) 1. 삽입 정렬(Insertion sort) : 삽입 정렬은 두 번째 자료부터 시작하여 그 앞(왼쪽)의 자료들과 비교하여 삽입할 위치를 지정한 후 자료를 뒤로 옮기고 지정한 자리에 자료를 삽입하여 정렬하는 알고리즘이다. 즉, 두 번째 자료는 첫 번째 자료, 세 번째 자료는 두 번쨰와 첫 번째 자료, 네 번째 자료는 세 번째, 두 번째, 첫 번째 자료와 비교한 후 자료가 삽입될 위치를 찾는다. 자료가 삽입될 위치를 찾았다면 그 위치에 자료를 삽입하기 위해 자료를 한 칸씩 뒤로 이동시킨다. 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다. 2. 예제 - 배열에 7, 4, 2, 6, 1 이 저장되어있다고 가정 -> 오..
기본 정렬 - 버블 정렬 (bubble sort) 알고리즘 1. 버블 정렬(Bubble sort) : 버블 정렬은 첫 번째 자료와 두 번째 자료를, 두 번째 자료와 세 번째 자료를, 세 번째와 네 번째, .... 이런식으로 (마지막 - 1)번째 자료와 마지막 자료를 비교하여 교환하면서 자료를 정렬한다. 서로 인접한 두 우너소를 검사하여 정렬하는 알고리즘이다. - 인접한 두 개의 레코드를 비교하여 순서가 맞지 않으면 서로 교환 하는 방식 1회전을 수행하고 나면 가장 큰 자료가 맨 뒤로 이동하므로 2회전에서는맨 끝에 있는 자료는 정렬에서 제외, 2회전을 수행하고 나면 끝에서 두 번째 자료까지는 정렬에서 제외된다. 이렇게 정렬을 1회전 수행할 때마다 정렬에서 제외되는 데이터가 하나씩 증가한다. 2. 예제 - 배열에 1, 6, 4, 5, 3 이 저장되어있다고 가정 ->..
기본 정렬 - 선택 정렬(selection sort) 알고리즘 1. 선택 정렬 (Selection sort) : 선택 정렬은 첫 번째 자료를 두 번째 자료부터 마지막 자료까지 차례대로 비교하여 가장 작은 값을 첫 번째에 놓고, 두 번째 자료를 세 번째 자료부터 마지막 자료까지와의 차례대로 비교하여 그 중 가장 작은 값을 찾아 두 번째 위치에 놓는 과정을 반복하며 정렬을 수행하게 된다. 제자리 정렬(in-place sorting) 알고리즘의 하나 - 정렬되지 않은 값들 이외에 다른 추가 메모리를 요구하지 않는 정렬 방법이다. 1회전을 수행하고 나면 가장 작은 값의 자료가 맨 앞에 오게 되므로 다음 회전에서는 두 번째 자료를 가지고 비교한다. ​ 2. 예제 - 배열에 1, 6, 4, 5, 3 이 저장되어있다고 가정 -> 오름차순 정렬 1회전 : ​ 2회전 : 3회전 :..