삽입정렬(Insertion Sort)는 이미 정렬되어 있는 i 개 짜리 배열에 하나의 원소를 더 더하여 정렬된 i+1개 짜리 배열을 만드는 과정을 반복한다. 선택정렬(Selection Sort)과 버블정렬(Bubble Sort)이 n개짜리 배열로부터 시작하여 그 크기를 하나씩 줄여나가는데 반하여, 삽입정렬은 1개짜리 배열로부터 시작하여 그 크기를 하나씩 늘려가는 정렬이다. 위의 예제를 살펴보면 배열 A[]에서 루프문을 통해 i가 두번째 원소 부터 배열의 끝 원소까지 루프문을 돌면서 A[i]번째의 원소를 자리에 알맞게 넣는다. i가 두번째 원소를 가리킬때 A[2]인 10의 자리는 A[1]인 29와 위치가 바껴야 하므로 자리가 교체된다. i가 세번째 원소를 가르킬때 A[3]인 14의 위치는 A[1]인 10 ..
버블정렬(Bubble Sort)도 선택정렬(Selection Sort)처럼 제일 큰 원소를 옮기는 작업을 반복하는 정렬이다. 다만, 제일 큰 원소를 오른쪽으로 옮기는 방법이 다를 뿐이다. 선택정렬(Selection Sort) 이란 ? 클릭 선택정렬(Selection Sort) 버블정렬(Bubble Sort)는 위의 예제 처럼 배열의 처음 인덱스부터 n-1 인덱스까지 이동하면서 인접하는 다음 인덱스의 원소와 크기를 비교하여 순서를 바로 잡아 나간다. 이 과정을 반복하게 되면 배열의 맨끝에는 배열의 가장 큰 원소가 자리하게 된다. 그러면 배열의 제일 마지막을 잊어버리고 이를 반복하게 되면 배열이 차례대로 끝에서 부터 내림차순으로 정렬되게 된다. 버블정렬(Bubble Sort)의 슈도코드는 다음과 같다. 버블..
선택정렬(Selection Sort)는 원리가 가장 간단한 정렬 알고리즘 중의 하나다. 우선 배열 A[1...n]에서 가장 큰 원소를 찾아 이 원소와 배열의 맨 끝자리에 있는 A[n]과 자리를 바꾼다. 그러면 방금 맨 뒷자리로 옮긴 원소, 즉 가장 큰 원소는 자기 자리를 찾았으므로 더 이상 신경쓰지 않아도 된다. 이 원소는 정렬이 끝났다고 볼 수 있으므로 이제 이 원소를 제외한 나머지 원소들로 같은 작업을 반복하면 된다. 간결하게 나타내면 각 루프마다최대 원소를 찾는다.최대 원소와 맨 오른쪽 원소를 교환한다.맨 오른쪽 원소를 제외한다.하나의 원소만 남을 때까지 위의 루프를 반복한다. 예를 들면, 정렬하고자 하는 배열(Initial array)에서 가장 큰 수(37)을 찾아 배열의 맨 끝 원소인 13과 자..
알고리즘이란 어떤 작업을 수행하기 위해 입력을 받아 원하는 출력을 만들어내는 과정을 기술한 것이다. 알고리즘을 설계하기 위해서는 우선 해야 할 작업을 명확하게 명시해야 한다. 설계하려는 알고리즘이 "무엇을" 하는지는 입력과 출력에 의해 명시할 수 있다. 예를 들어, 학생 100명의 시험점수를 입력으로 받아 최고점을 출력하는 작업을 한다면 입출력을 다음과 같이 표현할 수 있다. 입력 : 100개의 점수출력 : 입력된 100개의 점수 중 최대값 이 입출력을 다음과 같이 좀더 구체적으로 표현할 수도 있다. 입력 : 100개의 변수 x[1],...,x[100]의 값출력 : x[1],...,x[100] 중 최대값 이런 입출력을 요구하는 알고리즘은 대략 다음과 같은 모양을 가질 것이다. maxScore(x[], n..
이진검색트리는 저장과 검색에 평균 Θ()시간이 소요되지만 운이 나쁘면 트리의 모양이 균형을 잘 이루지 못한다. 균형이 많이 깨지면 Θ(n)에 근접한 시간이 소요될 수도 있다. 그래서 고안해 낸 것이 균형잡힌 이진검색트리이다. 균형잡힌 이진검색트리는 최악의 경우에도 이진트리의 균형이 잘 맞도록 유지한다. 균형잡힌 이진검색트리로 대표적인 것은 레드블랙트리와 AVL트리다. 레드블랙 트리는 자가균형이진탐색 트리(self-balancing binary search tree)로써, 대표적으로 연관배열(associative array) 등을 구현하는데 쓰이는 자료구조이다. 레드-블랙 트리는 복잡한 자료구조이지만, 실 사용에서 효율적이고, 최악의 경우에도 상당히 우수한 실행 시간을 보인다. 트리에 n개의 원소가 있을때..
이진검색트리같은 이진트리(Binary tree) 구조의 자료구조에서 검색, 출력 등의 이유로 전체 노드들을 방문(visit)하는 것을 순회(traversal)이라고 합니다. 아시다 싶이 이진트리의 구조는 최상위에 루트(root)가 존재하고 좌측에는 왼쪽 서브트리가 , 오른쪽에는 오른쪽 서브트리의 모양을 갖습니다. 대표적인 이진트리 순회 방법에 3가지의 방법이 있습니다. 루트의 방문 순서에 따라 구분이 됩니다. 1. 전위 순회 (Preorder Traversal)Root -> Left Tree -> Right Tree ( 루트를 제일 처음에 방문 )2. 중위 순회 (Inorder Traversal)Left Tree -> Root -> Right Tree ( 루트를 중간에 방문 )3. 후위 순회 (Posto..