본문 바로가기

정렬4

버블 정렬(Bubble Sort) 버블 정렬은 단계별로 인접한 수를 비교하여 큰 수를 배열의 뒤로 보내서 정렬하는 것을 말합니다. 예를 들어서 설명해 보겠습니다. 정렬하고자 하는 배열은 "4 5 3 6 7 2 1" 이고 이를 오름차순 정렬해보겠습니다. 일단 앞에서부터 이웃한 두 수를 비교해서 인덱스 i 번째 수 보다 i + 1 번째 수가 작다면(array[i] > array[i+1]) 두 수를 바꿔줍니다. 위의 그림에서 이웃한 두 수 4, 5를 비교했을 때 i 번째 수(4)보다 i+1 번째 수(5)가 더 크므로 바꿔주지 않고 다음 인덱스로 넘어갑니다. 5, 3을 비교했을 때는 i 번째 수(5)보다 i+1 번째 수(3)가 더 작으므로 두 수를 바꿔줍니다. 이런 식으로 배열의 끝까지 진행하면 가장 큰 수가 배열의 맨 끝에 위치하게 됩니다. .. 2019. 6. 12.
힙 정렬(Heap sort) 힙 정렬(Heap sort)는 최대 힙과 최소 힙을 이용해서 정렬하는 방법입니다. N개의 자료들을 이용해서 먼저 힙을 만들고 루트를 삭제하면서 정렬합니다. 삭제된 루트 노드의 자료를 차례대로 배열에 넣어 정렬하므로 루트 노드에 어떤 수가 들어가냐에 따라 내림차순 정렬과 오름차순 정렬이 정해집니다. 최대 힙은 루트 노드에 가장 큰 수가 들어가고, 최소 힙은 루트 노드에 가장 작은 수가 들어가기 때문에 최대 힙을 이용하면 내림차순 정렬을 최소 힙을 이용하면 오름차순 정렬을 할 수 있습니다. (물론 루트노드 데이터를 배열에 거꾸로 넣으면 어떤 힙을 이용하든 내림차순 정렬, 오름차순 정렬 둘 다 가능합니다.) 4 5 3 6 7 2 1 데이터를 이용하여 최대힙을 만들고 이를 내림차순 정렬 해보겠습니다. 최대 히프.. 2019. 5. 30.
병합 정렬 (Merge Sort) 병합 정렬은 분할 정복(Divide & Conquer)의 대표적인 예로 배열을 잘게 나누어서 다시 합칠 때 정렬하는 방법입니다. {8, 4, 6, 2, 1, 3, 5, 9, 10, 7} 인 배열을 병합 정렬 보겠습니다. 크기가 1인 배열이 될 때 까지 반으로 분할 하고, 이를 다시 합치면서(정복) 정렬하는 것이 병합 정렬입니다. 합치면서 정렬하는 방법에 대해 좀 더 상세히 알아보도록 하겠습니다. 배열 A : {4, 8} 과 B: {1, 2, 6}을 합쳐보도록 하겠습니다. 일단 배열의 크기가 1일 때부터 정렬하면서 합쳐주었으므로 배열 {4, 8}과 {1, 2, 6}은 정렬된 상태입니다. 그러므로 가장 앞에 수가 최솟값입니다. 각 배열을 인덱스 0부터 비교해가면서 작은 값을 배열의 0번째 값에 넣어줍니다. .. 2019. 4. 23.
선택 정렬 (Selection Sort) 선택 정렬은 단계별로 최대값이나 최소값을 찾아서 배열의 뒤로 보내서 정렬하는 알고리즘 입니다. 이 때, 최대값을 뒤로 보낼 경우 오름차순 정렬, 최소값을 뒤로 보낼 경우 내림차순 정렬이 됩니다. "4 5 3 6 7 2 1"인 배열을 선택 정렬로 오름차순 정렬해보겠습니다. 최대값을 찾기 위해서 배열의 앞에서부터 배열을 탐색합니다. 일단 첫번째 요소인 4가 최대값이 됩니다. 2번째 배열 요소인 5는 현재 최대값인 4보다 크므로 최대값을 5로 갱신합니다. 3번째 요소인 3은 현재 최대값인 5보다 작으므로 다음 배열요소를 비교합니다. 이와 같은 방법으로 정렬되지 않은 배열의 마지막 요소까지 탐색, 비교하여 최대값을 찾으면 최대값은 7이되고 이를 정렬되지 않은 배열의 마지막 위치와 바꿔줍니다. (7과 1 교환) .. 2019. 4. 15.