반응형

언어 자료구조 알고리즘/C언어 예제 104

퀵소트

퀵 소트 알고리즘 간략한 퀵소트 알고리즘 pivot을 선택하여 pivot보다 작은 것을 오른쪽으로 큰 것을 왼쪽으로 보낸뒤 pivot의 자신의 자리로 들어간 뒤에 앞쪽 배열과 뒤쪽 배열을 재귀적으로 퀵소트를 호출하는 방법을 사용한다. 퀵 소트 알고리즘의 pseudo-code(의사코드)의 예 1. pivot을 선택한다. (다양한 방법이 있고 이에 따라 성능이 많은 차이를 지니게 된다.) 2. pivot을 배열의 맨 앞(혹은 맨 끝)의 요소와 교체한다. 3. i = 1로 설정,j=asize-1 로 설정 4. Loop i가 j보다 작을 동안 4.1 Loop pivot(배열의 맨 앞의 요소) >= 배열의 i번째 요소 4.1.1 i를 증가 4.2 Loop pivot(배열의 맨 앞의 요소)

선택정렬

선택정렬 해결할 문제 – n개의 요소로 구성된 배열 A를 정렬하자 §초기: A – Loop A의 카운터 i에 0을 대입 §Loop A( i O(N*N) 예: Array: 27 8 12 15 23 9 6 25 17 1: 6 8 12 15 23 9 27 25 17 2: 6 8 12 15 23 9 27 25 17 2-a: 6 8 12 15 23 9 27 25 17 i j min 2-b: 6 8 12 15 23 9 27 25 17 i j min 2-c: 6 8 12 15 23 9 27 25 17 i j min 2-d: 6 8 12 15 23 9 27 25 17 i j min 2-e: 6 8 12 15 23 9 27 25 17 i j min 2-f: 6 8 12 15 23 9 27 25 17 i j min 3: ..

삽입정렬

삽입정렬 해결할 문제 – n개의 요소로 구성된 배열 A를 정렬하자 §초기_A – Loop A의 카운터 i에 1을 대입 §Loop _A( i temp and j> 0) //Loop invariant: temp’s position is at A[0]-A[j] § swap A[j],A[j-1] § j assign j-1 § A[j] assign temp i assign i+1 수행속도 i번째 요소를 자기 위치에 보내기 - LoopB의 수행속도 :T'(n) T('n) 은 최악의 경우 n-1번 비교한다. 삽입 정렬 - T(n) T(n) = T'(1) + T'(2) + ... + T'(n) = 0 + 1 + ... + (n-1) 즉 O(N*N)이다. 하지만 배열에 데이터를 순차적 보관을 하면서 보관하는 기능을 수행..

정보 올림피아드

1. 다음은 일정한 규칙에 따라 수를 늘어놓은 것이다. 빈칸에 가장 알맞은 수는? 1 , 3 , 6 , 11 , 19 , 31 , 48 , ( ) ①65②68③71④74⑤77 2. A, B, C, D, E가 각각 0~9 까지 숫자 중에 하나이고 다른 알파벳은 다른 숫자를 나타낸다. 다음 식을 만족하는 D의 값은? A B × B A A B B C E D B ①0②1③2④3⑤4 3. 1을 7로 나누었을 때 소수점 이하 97번째 자리 수는 다음 중 어떤 것인가? ①1②2③4④5⑤7 4. A◎B는 A를 B로 나눈 몫이고 A⋆B는 A를 B로 나눈 나머지이다. (A◎3)⋆10 = 3일 때 A가 될 수 있는 두 자리 자연수의 개수는? ①8개②9개③10개④11개⑤12개 5. 미국 돈 40 달러는 싱가포르 돈 32 달러..

중복되지 않게 랜덤한 카드 발생

프로그래밍을 하다보면 중복을 하지 않으면서 랜덤을 발생해야 하는 문제들이 있다. 하나의 예로 카드를 섞어 보기로 하자. #include #include #include #define MAX_CARD_TYPE 4 #define MAX_CARD_NUM 13 const char *ctypes[MAX_CARD_TYPE]={"♠","♥","♣","◆"}; const char *ntypes[MAX_CARD_NUM]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; int RandCard(int base[][13]); void PrintCard(int lcnt,int ct,int cn); void main() { int arr[MAX_CARD_TYPE][MAX_CAR..

적분 공식을 이용한 Sin(x)함수 만들기

sin(x)를 구하는 적분 공식은 다음과 같다. sin(x) = x - x^3/3! + x^5/5! - x^7/7! + x^9/9! ... 여기서 x는 각도를 얘기하는 것이 아니라 라디안을 얘기를 한다. math.h에서 제공하는 sin()함수도 라디안을 입력 값을 갖는다. 이를 사용할 때 sin(90);과 같이 사용하는 것이 아니라 sin(90/PI);로 사용해야 한다. 암튼, 적분 공식을 이용해서 각도를 입력 매개변수를 받는 함수를 만들어 보자. #include #include double Fac(int n); double SignAngle(int angle) { int i; double rad = (angle%180)/180.0; double mul=0; int sign = 1; for(i=1 ; i

간단하게 Random함수 만들기

먼저 3.2GHz컴퓨터다라는 말을 많이 들었을 것입니다. 여기서 3.2GHz라는 말은 CPU클럭이 1초에 3.2 * 1,000,000,000 번 발생한다는 것입니다. 즉, CPU의 연산 처리 속도와 관련이 있다는 것이구요. BOOL QueryPerfomanceOunter(LPLARGE_INTERGER *pli);는 발생한 클럭 수를 얻어오는 interface입니다. 이를 이용해서 간단히 Random을 만들 수 있습니다. 물론, spirit한 정도가 균등하면서 동시에 Random한 좋은 Random이라고 할 수 없겠지만 굉장히 좋은 Random함수가 필요한 것이 아니라면 큰 문제가 되지 않을 것입니다. 물론, 있는 거 걍 사용하는 게 더 낫겠지만... #include #pragma warning (disa..

반응형