Coding Skills/Algorithm & C
-
2011.02.26 Shell Sort (쉘 정렬)
알고리즘 쉘 정렬은 삽입 정렬의 단점을 보완하기 위해서 Donald Shell이 1958년 고안한 방법이다. 삽입 정렬은 Array 전체에 대해서 정렬을 수행하게 된다. 최악의 경우, 다시말해서 오름차순 정렬을 해야하는데, Array가 내림차순 정렬이 되어있는 경우 연산이 많아지게 될 수 밖에 없다. 쉘 정렬의 기본적인 아이디어는 삽입 정렬을 하기 전에 정리를 해놓자는 것이다. 그렇다면, 어떻게 정리할 것인가? 삽입 정렬은 모든 원소에 대해서 검사를 하지만, 쉘 정렬의 경우, 앞에서 구한 어떠한 간격만큼 떨어진 원소에 대해서 삽입정렬을 먼저 수행하고, 그 간격을 점점 줄여 계속 삽입정렬을 하는 방법을 취한다. 간격은 결국 1이 될 것이며, 1이 되는 때는 곧, 삽입 정렬을 수행하는 것과 동일하다. 하지만..
-
2011.02.26 Optimized Bubble Sort (최적화된 버블 정렬)
알고리즘 사실 최적화라고 하기 민망할 정도로 버블정렬과 큰 차이가 없으며 실제 코드상으로도 단 2글자만 추가되었을 뿐이다. 최적화된 버블 정렬의 주된 아이디어는, 맨 마지막 원소는 이미 정렬 되어있어서 또 검사해줄 필요가 없다는 것이다. 즉, 버블 정렬의 첫번째 패스를 눈여겨 살펴보면, 가장 큰 값이 항상 맨 끝으로 이동된다. 어찌보면 당연한 결과라고 할 수 있다. 가장 큰 값은 if문에 발각되어 계속 Swap 되기 때문에, 맨 뒤까지 질질 끌려간다. 결론적으로, 두번째 패스에서는 마지막 원소를 검사해줄 필요가 없다. 세번째 패스에서는 마지막 원소와 마지막에서 두번째 원소 역시 검사해줄 필요가 없다. 마지막 패스에서는 두번째 원소와 첫번째 원소만 검사해주면 된다. 코드 #include void op_bu..
-
2011.02.26 Bubble Sort (버블 정렬)
알고리즘 버블 정렬은 인접한 두 개의 원소를 비교하고, 전체적인 순서에 맞게 두 원소를 맞바꿔줌으로써 정렬을 하게 된다. 물론 여러번의 패스를 거쳐야하만 정렬이 완료되며, 이미 정렬이 완료되었다고 하더라도, 인접한 두개의 원소만 검사하기 때문에, 패스를 모두 거치기 전에는 계속 연산을 하게 된다. 다음과 같은 숫자들이 있다고 가정하자. 3, 7, 2, 6, 9, 1 버블정렬을 앞의 원소부터 차례로 해 나가면 첫번째 두개의 원소는 이미 오름차순 정렬 상태이므로, 정렬할 필요가 없다. 다음 두개의 원소, 7, 2의 경우 순서가 반대로 되어있으므로 정렬, 3, 2, 7, 6, 9, 1 다음, 7, 6에 대해서 마찬가지로 정렬 3, 2, 6, 7, 9, 1 이후의 정렬 과정을 통해 첫번째 패스가 지난 이후의 상..
-
2011.02.26 Insertion Sort (삽입 정렬)
알고리즘 삽입 정렬의 주요 아이디어는, 원소를 맞는 위치로 옮기고 나머지 원소들을 밀어내는 것이다. 먼저 첫번째 원소는 정렬된 것으로 생각하며, 두번째 원소부터 연산을 시작하게 된다. 각 패스마다 n번째 원소를 기준으로 잡는다. 기준이 된 원소는 데이터를 임시로 저장해놓는다. n-1번째 원소부터 역으로 첫번째 원소까지 검사를 시작한다. 만약 검사대상이 현재 기준이 되는 값보다 큰 경우 검사대상을 한칸 뒤로 보낸다. 여기서 뒤로 보낸다는 의미는, Index를 하나 키운다는 것으로, 다른 값들을 차례차례 덮어씌운다. 예를들어 다음과 같은 원소들이 있다고 가정하자. 3, 7, 2, 6, 9, 1 첫번째 패스에서는 7을 기준으로 잡는다. 7은 임시 저장소에 저장이 되므로, 다른 값으로 덮어씌워도 상관이 없다. ..
-
2011.02.25 Selection Sort (선택 정렬)
알고리즘 정렬은 Array를 기반으로 이야기 하도록 하겠다. 정렬에는 상당히 여러가지 방법이 있는데, 선택 정렬은 가장 기초적인 방법이라고 할 수 있다. 첫번째 패스에서는 Array 전체를 검사한 다음, 가장 작은 숫자를 첫번째 Index와 맞바꿔준다. 두번째 패스에서는 첫번째 Index를 제외한 나머지에 대해서 같은 방식으로 가장 작은 숫자를 두번째 Index와 맞바꿔준다. 이런 식으로 배열의 끝까지 검사하게 되면 오름차순의 선택정렬이 완성된다. 내림차순의 정렬을 하고 싶다면, 작은 숫자 대신 큰 숫자를 선택하는 방법을 택하면 된다. 아마도 부등호의 방향만 바꿔주면 될 것으로 본다. 효율성을 조금 더 증가시키기 위해서 몇 가지를 생각해 보자면 각각의 패스에서 자기 자신은 생각할 필요가 없을것이다. 그리..
-
2011.02.25 Visual Studio C++ 2010 Express 다운받아 설치하기
시작 Visual Studio는 설치하고 싶을 때 어둠의 경로를 찾을 필요가 없다. 정말 단순한 몇 가지 절차를 통해서 인터넷을 통해 다운로드 받아 설치하고, Registration KEY를 받아 등록할 수 있다. Visual Studio 2010을 설치하길 원한다면 아래에 소개된 절차를 따라하면 된다. 먼저 Windows Live ID가 필요하다. 이미 Hotmail 계정이나, MSN 메신저 등의 계정이 있다면 상관 없지만 없다면 계정을 생성해야한다. 계정 생성은 http://home.live.com/ 에서 가능하다. Registration KEY를 받으려면 계정이 필요하다. 순서는 상관 없지만 좀 더 스무스하게 진행시키고 싶다면 계정을 미리 만들어 두도록 하자. 프로그램 다운 및 설치 링크: http..