본문 바로가기

전체 글75

4. 선택 정렬(Selection Sort) 선택 정렬의 개념 한 위치씩 선택해서 순차적으로 작은 값들을 찾아서 선택 정렬이라고 한다. ▼ 선택 정렬 알고리즘 도식화 선택 정렬은 최소값을 찾은 다음 교환하기 때문에 교환 함수 호출을 최소화할 수 있다. 선택 정렬의 성능[O(n²)] 정렬할 자료의 수의 제곱에 비례하여 늘어난다. C99 ▼ 관련 개념 Loop & Pointer & Call By Address ▼ 구현 코드 int Compare(int lhs, int rhs) { return (lhs - rhs); } void Swap(int* lhs, int* rhs) { int _temp = *lhs; *lhs = *rhs; *rhs = _temp; } void SelectionSort(int arr[], int length) { int min; .. 2021. 1. 18.
3. 거품 정렬(Bubble Sort) 거품 정렬의 개념 거품 정렬은 단순히 처음부터 끝까지 두 개의 값을 서로 비교해가면서 정렬한다. ▼ 비교하는 모습이 거품과 같다. 두 값을 비교해서 교환하는 것이 마치 거품이 일어나는 모습과 비슷하다고 해서 거품 정렬이라 부른다. ▼ 거품 정렬 알고리즘 도식화 거품 정렬은 한번 외부 순환문을 돌 때마다 목표 방향 끝자리는 최댓값 혹은 최솟값이 정렬된다. 그렇기 때문에 내부 순환 문의 목푯값이 하나씩 줄어드는 것이 알고리즘의 핵심이다. 거품 정렬의 성능[O(n²)] 정렬할 자료의 수의 제곱에 비례하여 늘어난다. 순차 정렬과 마찬가지로 단순 무식한 방법인 만큼 거품 정렬은 거의 모든 경우에서 최악의 성능을 보여준다. 그리고 정렬이 이미 완료된 경우엔 최선의 성능을 보이는 것도 순차 정렬과 같다. 순차 정렬과.. 2021. 1. 18.
2. 순차 정렬(Sequential Sort) 순차 정렬의 개념 한 자리씩 순차적으로 정렬한다고 해서 순차 정렬이라 부른다. ▼ 순차 정렬 알고리즘 도식화 그림에서처럼 현재 위치와 그 뒤의 값들과 비교하면서 가장 작은 값(혹은 큰 값)으로 교환한다. 내부 순환문이 한번 다 돌면 그 위치는 최솟값 혹은 최댓값이 확정되기 때문에 다음 위치에서 다시 반복하는 것이 알고리즘의 핵심이다. 순차 정렬의 성능[O(n²)] 정렬할 자료의 수의 제곱에 비례하여 늘어난다. 단순 무식한 방법인 만큼 순차 정렬은 거의 모든 경우에서 최악의 성능을 보여준다. 하지만 역시나 정렬이 이미 완료된 경우엔 최선의 성능을 보인다. 데이터에 따라 다르긴 하지만 순차 정렬은 실무에서는 거의 쓰이지 않는다고 한다. C99 ▼ 관련 개념 Loop & Pointer & Call By Add.. 2021. 1. 18.
210118(월) 순차 정렬(Sequntial Sort) 한 자리씩 순차적으로 정렬한다고 해서 순차 정렬. 내부 순환문이 한번 다 돌면 그 자리는 최솟값이 확정되고 다음 자리로 넘어간다. ▼ 개념 for (i = 0 > n-1) for (j = i+1 > n) if (Compare(arr[i], arr[j]) > 0) Swap(arr[i], arr[j]); ▼ 코드 #include int Compare(int lhs, int rhs); void Swap(int* lhs, int* rhs); int main() { const int arrMax = 5; int iArr[5] = { 0,3,4,2,1 }; printf("> BEFORE\n"); for (int i = 0; i < arrMax; i++) { printf("iA.. 2021. 1. 18.
1. SDL2 확인 코드 분석하기 이제 기본적인 SDL2 확인 코드를 분석하며 SDL2의 기본적인 생명주기를 이해해본다. SDL2가 C로 작성되어 절차 지향적인 구조를 가지고 있기 때문에 순서에 따라 코드를 하나씩 추가해가며 프로그램 흐름을 이해해보자. 필요한 헤더 파일 포함하기 ▼ 코드 // SDL2와 표준입출력 헤더 포함 #include #include SDL2 헤더 파일은 아주 직관적이다. 기본 기능외의 추가적인 기능을 사용하려면 몇 가지 헤더 파일을 더해줘야 하지만 지금은 필요 없다. 화면 크기 전역 변수 선언하기 ▼ 코드 // SDL2와 표준입출력 헤더 포함 #include #include // 화면 해상도 전역 상수 설정 const static int SCREEN_WIDTH = 640; const static int SCREE.. 2021. 1. 18.
15. 동적 할당과 배열의 차이 동적 할당과 배열은 일차원보다 다차원에서 차이점을 쉽게 구분할 수 있다. 일차원은 차이가 거의 없다. 결론부터 말하면 일차원에서 동적 할당과 배열은 한가지 부분을 제외하고는 차이가 없다. 동적 할당은 선언 할 때 상수/변수 상관없이 생성할 수 있지만 배열은 상수만 된다. ▼ 일차원에서 동적 할당과 배열의 코드 #include #include int main() { const int arrMax = 5; // INIT STATIC ARRAY int iArr[arrMax] = { 0,1,2,3,4 }; // PRINT STATIC ARRAY printf("== STATIC ARRAY ==\n"); for (int i = 0; i < arrMax; i++) { printf(" iArr[%d] : %d\n", .. 2021. 1. 18.