본문 바로가기

자료구조12

c언어 선택정렬 함수 선택정렬(selection sort)이란 정렬되지 않은 데이터들에 대해 가장 작은 데이터를 찾아 가장 앞의 데이터와 교환해나가는 방식이다.선택정렬의 시간복잡도는 O(n)이다. c언어로 구현하면 다음과 같다. void selsort(int arr[], int n){ int max, temp;for(int i=0;i 2018. 4. 19.
c언어 버블정렬 함수 버블정렬(bubblesort)이란 서로 이웃한 데이터들을 비교하며 가장 큰 데이터를 가장 뒤로 보내며 정렬하는 방식이다. 마치 공기방울이 일어나듯이 정렬된다고 해서 버블정렬이라고 이름이 붙었다. 시간 복잡도는 O(n^2)이다. c언어로 구현해보면 다음과 같다. void bubblesort(int arr[], int n){ int temp; for(int i=0;i 2018. 4. 19.
재귀함수 - 하노이 타워 하노이 타워 문제란 A, B, C의 기둥이 있을 때 A의 모든 원반을 C로 옮기는 문제이다.단, 원반은 한번에 하나씩 옮길 수 있고 작은 원반 위에 큰 원반이 올려져서는 안된다. 이걸 어떻게 재귀적으로 구현하냐면.. 규칙을 찾아보자. 원반은 1, 2, 3, 4로 크기를 구분하도록 하자 만약 원반이 3개가 있다고 가정했을 때 A의 세개의 원반을 C로 옮기기 위해선 원반 3을 C로 옮겨야 함. 그리고 이를 위해선 원반 1과 2를 먼저 원반 B로 옮겨야 한다. 만약 원반이 4개가 있다고 가정하면A의 네개의 원반을 C로 옮기기 위해선 원반 4를 C로 옮겨야 함. 그리고 이를 위해선 원반 1과 2와 3을 먼저 원반 B로 옮겨야 한다. 그렇다면 규칙이 원반 N개를 A에서 C로 옮길 때1. 작은 원반 N-1개를 A에.. 2018. 4. 16.
재귀함수 - 피보나치 재귀 함수라는 것은 recursive(반복적인) 함수이다. 나는 과거 누군가에게 재귀함수를 설명하기 위해 다음과 같은 비유를 했다. TV를 보고 있는데 TV안에 TV가 있었다. 그런데 그 TV안에 TV안에 TV를 보았다. 그런데 그 TV안에 TV안에 TV안에 TV를 보았고...그렇다면 만약 모든 TV를 꺼야한다면 어느 것부터 꺼야할까? 가장 바깥쪽에 있는 TV부터 꺼나가야 할까? 안쪽에 있는 TV부터 꺼나가야 할까?이런식으로 이해를 시켰었다. 당연히 안쪽에서부터 꺼야지 차례차례 꺼나갈 수 있지~라고 하면서.. 재귀적으로 피보나치를 구하는 코드이다. #include int Fibo(int n){if(n==1)return 0;else if(n==2)return 1;elsereturn Fibo(n-1)+Fib.. 2018. 4. 16.