[알고리즘] 삽입 정렬 구현 (c언어)
·
🤯 데이터구조와 알고리즘
🌿삽입정렬이란? 기본 정렬 알고리즘 중 하나이며, KEY를 선택후 배열의 값들과 비교해가며 삽입을 할지 안할지 결정한다. 최적의 경우 -> 이미 정렬된 배열에서는 O(n)의 시간복잡도를 가진다. 최악의 경우 -> O(n^2)의 시간 복잡도를 가진다. 🌿최적의 경우가 O(n)인 이유 다른 기본 정렬알고리즘들과는 다르게 삽입 정렬은 정렬된 배열에서 O(n)을 가지는데 void insertion_sort(int* arr, int size) { int i, j, key; for (i = 1; i = 0 && arr[j] > key; j--) { //***여기 부분때문에 최적의 경우 O(n)을 가짐! arr[j + 1] = ar..
[알고리즘] 버블 정렬 구현 (c언어)
·
🤯 데이터구조와 알고리즘
🌿버블 정렬이란? 기본 정렬 알고리즘 중 하나이며, 인접한 두 원소의 크기를 비교하며 교환한다. 2중 for문으로 이루어지며 O(n^2)의 시간 복잡도를 가진다. 🌿작동 방식 편의상 오름차순 정렬을 기준으로 설명! - 첫 루프에서 1번째와 2번째 비교 후 교환 2번째와 3번째 비교 후 교환 . . size-1번째와 size번재 비교후 교환 이러면 최댓값이 맨뒤에 하나 옮겨지게 된다. - 두번째 루프에서 1번째와 2번째 비교 후 교환 2번째와 3번째 비교 후 교환 . . size-2번째와 size-1번재 비교후 교환 역시 맨뒤 - 1 번째에 최댓값이 옮겨진다. - 위 과정 반복!! ⭐그림을 통해 이해해 보자 여기서 중요한건 [i]와 [i+1]번째 비교시[ i+1]의 값이 더 작을때 교환을 해준다는 것이다...
[알고리즘] 선택 정렬 구현 (c언어)
·
🤯 데이터구조와 알고리즘
🌿선택 정렬이란? 기본 정렬 알고리즘 중 하나이며, 그중에서도 가장 단순한 원리로 작동되는 알고리즘이다. 2중 for문으로 이루어지며 O(n^2)의 시간 복잡도를 가진다. 🌿작동 방식 각 루프마다 - 최솟값을 탐색. - 비교하는 값과 최솟값을 교환. 하나의 원소가 남을때 까지 위의 루프를 반복 ⭐그림을 통해 이해해 보자 🌿코드 #include void selection_sort(int* arr, int size) { for (int i = 0; i arr[j]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } int mai..