본문 바로가기

CS43

쉘 정렬 (Shell Sort) 1. 쉘 정렬 간격(gap)을 이용해서 굵직굵직한 삽입정렬을 하자 ※ 삽입정렬은 어느 정도 이미 정렬된 배열에서 효과적 ∴ 1. 간격을 이용해서 굵직굵직한 그룹별 삽입 정렬을 한다. (큰 숫자들 대충 뒤로, 작은 숫자들 대충 앞으로) 2. 큰 틀에서 어느정도 정렬이 된 상태가 된다. 3. 이후에 정석 삽입정렬을 해서 완벽히 정렬 ※ gap 전체 원소 수의 1/2 → 이전 gap의 1/2 → 이전 gap의 1/2 → ...... → 1 2. 쉘 정렬 예제 ex ) 30 60 90 10 40 80 40 20 10 60 50 30 40 90 80 오름차순 정리하시오. #include void shellSort(int arr[], int len) { for(int h=len/2 ; h>0 ; h/=2) { fo.. 2022. 6. 6.
퀵 정렬 (Quick Sort) 1. 퀵 정렬▶ 분할정복 알고리즘input 배열을 반복적으로 분할해서 계산하는 알고리즘이며,  평균 시간복잡도가 O(N*logN) 특정한 값 a을 기준으로 a보다 큰 수, a보다 작은 수를 나누자 ! ※ 특정한 값 a = pivot※ 일반적으로 첫번째 원소를 pivot 값으로 설정한다.   2. 퀵 정렬 예제ex )  3  7  8  1  5  9  6  10  2  4  오름차순 정리하시오. #include int number = 10;int data[10] = { 1, 10, 5, 8, 7, 6, 4, 3, 2, 9 };void show() { for (int i = 0; i = end) { // 원소가 1개인 경우 return; } int key = start; // k.. 2022. 5. 9.
삽입 정렬 (Insertion Sort) 1. 삽입 정렬 각 숫자를 적절한 위치에 삽입하자 ! ※ 한번 수행할 때마다 [앞] 정렬된 부분의 원소 수가 1개 증가, [뒤] 정렬 안된 부분의 원소 수는 1개 감소됨 반복해서 수행하면 결국 [뒤] 정렬 안된 부분에는 아무 원소도 남지 않고 모두 정렬됨 ※ 선택/버블 vs. 삽입 ▶ 선택, 버블: 이미 알맞게 정렬되어 있더라도 차례가 되면 정렬당함 (위치 바꾸는 과정 거침) : 비효율적 ▶ 삽입: 필요할때만 위치를 바꿈 : 효율적 이번 주자 앞에 있는 애들은 다 이미 알맞은 위치에 정렬되어 있는 상태이므로 다시 정렬할 필요 없음 2. 삽입 정렬 예제 ex ) 1 10 5 8 7 6 4 3 2 9 오름차순 정리하시오. #include int main(void) { int a[] = { 1, 10, 5, .. 2022. 5. 6.
버블 정렬 (Bubble Sort) 1. 버블 정렬 2개씩 비교해서 더 작은 것을 앞으로 자리바꿈 * 세로로 그려 보면, 가장 작은 것이 거품처럼 위로 (=맨 앞으로) 올라가는 형태 [ Algorithm ] 1. for pass = 1 to n-1 2. for i = 1 to n-pass 3. if (A[i-1] > A[i]) // 위의 원소가 아래의 원소보다 크면 4. A[i-1] ↔ A[i] // 자리바꿈 5. return A 2. 버블 정렬 예제 ex ) 1 10 5 8 7 6 4 3 2 9 오름차순 정리하시오. #include int main(void) { int a[] = { 1, 10, 5, 8, 7, 6, 4, 3, 2, 9 }; int n = sizeof(a) / sizeof(int); int temp; for (int i .. 2022. 5. 4.
선택 정렬 (Selection Sort) 1. 선택 정렬 가장 작은 것을 맨 앞으로 가져오자 ! 2. 선택 정렬 예제 ex ) 1 10 5 8 7 6 4 3 2 9 오름차순 정리하시오. #include int main(void) { int a[] = { 1, 10, 5, 8, 7, 6, 4, 3, 2, 9 }; int min, minIdx, temp; int n = sizeof(a) / sizeof(int); for (int i = 0; i < n-1; i++) { min = a[i]; minIdx = i; for (int j = i + 1; j < n; j++) { if (a[j] < min) { min = a[j]; minIdx = j; } } temp = a[i]; a[i] = a[minIdx]; a[minIdx] = temp; } for.. 2022. 5. 3.
정렬 알고리즘 1. 정렬 알고리즘 임의의 순서로 제공된 수들을 크기순으로 정렬하는 알고리즘 다양한 종류가 있음 알고리즘의 효율성 차이를 잘 나타냄 2. 정렬 알고리즘의 종류 ■ 선택 정렬 (Selection Sort) https://hyeminseo.tistory.com/61?category=1072199 ■ 버블 정렬 (Bubble Sort) https://hyeminseo.tistory.com/63?category=1072199 ■ 삽입 정렬 (Insertion Sort) https://hyeminseo.tistory.com/64?category=1072199 ■ 퀵 정렬 (Quick Sort) https://hyeminseo.tistory.com/65?category=1072199​ ■ 병합 정렬 (Merge S.. 2022. 5. 3.
Graph : 개념 정리 1. Graph : A data Structure that represents the relationships between connected objects. 2. Terminology Vertex = Node Edge = link 3. Graph Type Undirected Graph Directed Graph ONLY undirected edge ONLY directed edge Both way One way (A, B) (A, B) == (B, A) != ▶ Weighted Graph : A graph with the weight assigned to edges ▶ Sub Graph : A graph consisting of a subset of the vertex set V(G) & the edg.. 2022. 4. 19.
Array : 개념 정리 1. Array (1) data type이 동일한 자료를 연속으로 저장함 (2) A set of pairs of 2. 1차원 배열 ▷ 1차원 배열의 선언 자료형 배열명[element 개수 = 배열 크기] ; int MyArr[100]; ▷ 1차원 배열의 초기화 자료형 배열명[배열 크기] = { 초기값 리스트 } ; int MyArr[3] = {1,2,3}; or int MyArr[ ] = {1,2,3,4}; #include void main() { int score[3] = { 91, 86, 97 }; char grade[3] = { 'A', 'B', 'A' }; printf("\n *** 학년별 취득 학점 ***\n\n"); for (int i = 0; i < 3; i++) { printf("%d학년 .. 2022. 4. 10.
Time Complexity Analysis Time Complexity Analysis : 시간 복잡도 ▶ 시간 복잡도 표기법 ① Big O Notation ② Big Ω Notation ③ Big θ Notation 함수의 상한 나타냄 함수의 하한 나타냄 함수의 상한과 하한 나타냄 모든 n >= n0 에 대하여, |f(n)| = n0 에 대하여, |f(n)| >= c |g(n)| 을 만족하는 상수 c와 n0이 존재하면, f(n) = Ω(g(n)) 이다. 모든 n >= n0 에 대하여, c1 |g(n)| 2022. 4. 10.