분류 전체보기(394)
-
2차원 배열 -행,열 크기 구하기
#include int main() { int numArr[3][4] = { // 세로 크기 3, 가로 크기 4인 int형 2차원 배열 선언 { 11, 22, 33, 44 }, { 55, 66, 77, 88 }, { 99, 110, 121, 132 } }; printf("%d\n", sizeof(numArr)); // 48: 4바이트 크기의 요소가 12(4*3)개이므로 48 int col = sizeof(numArr[0]) / sizeof(int); // 4: 2차원 배열의 가로(열) 크기를 구할 때는 // 가로(열) 한 줄의 크기를 요소의 크기로 나눠줌 int row = sizeof(numArr) / sizeof(numArr[0]); // 3: 2차원 배열의 세로(행) 크기를 구할 때는 // 배열이 차..
2023.01.25 -
계수 정렬(counting sort)
1. 데이터값은 양수여야 가능 2. 각각의 데이터가 몇 번 등장했는지 세는 방식이다. 따라서 가장 큰 데이터의 크기로 배열을 만들어야 한다. --> 많은 메모리 공간을 필요로 함 ex) 데이터가 5개 존재하는데 각각 0, 3, 2, 1, 1000000 이라면? 3. 데이터 간 비교를 하지 않으므로 시간 복잡도는 O(N) 이다. 수의 범위가 작다면 계수 정렬을 쓰는게 유리하다. 데이터들이 저장된 배열에서 각 숫자가 몇번 나오는지 세는 방식이다. [3,4,1,2,4,6,1] 이라는 배열이 있다고 하자. 1 : 2개 2 : 1개 3 : 1개 4 : 2개 6 : 1개 그렇다면, 1부터 6까지 갯수대로 나열해보자. [1,1,2,3,4,4,6] void countingsort(int data[], int size)..
2023.01.13 -
퀵 정렬(quick sort)
1. 분할 정복 알고리즘 2. 평균적으로 매우 빠른 성능 3. stable 하지 않다 * stable 정렬: 정렬을 할 때 중복된 값들의 순서가 변하지 않는 정렬 --> 즉 퀵 정렬은 중복된 키도 비교함.(중복된 키들을 정렬할 때는 사용하지 않는 게 바람직함) 4. 시간복잡도 - 최악: O(n^2) 평균:O(nlogn) 5. 공간복잡도 - O(nlogn) in-place 정렬이라고 하기 힘들지만, 상대적으로 작은 메모리만을 사용하므로 흔히 in-place 정렬이라고 한다. * in-place 정렬: 추가적인 메모리 공간이 거의 안드는 정렬 위와 같은 배열을 오름차순으로 퀵 정렬 한다고 하자. 가장 먼저 pivot을 설정해야 하는데, pivot을 설정하는 것에는 여러가지 방법이 있다. 가장 앞의 원소, 중..
2023.01.13 -
병합 정렬(merge sort)
1. 원리 먼저 데이터를 분할한다. (크기가 1인 리스트들이 남을 때까지) //mergesort 합치면서 정렬을 같이한다. //merge int main(){ int data[8]={...}; ... } void mergesort(int data[], int p, int r){//p는 시작 인덱스, r은 마지막 인덱스 int q; if(p
2023.01.12 -
정렬 알고리즘
시간 복잡도: 최선이든 최악이든 O(n log n) 시간 복잡도: 최선이나 평균적으로 O(n log n)이지만 최악의 상황에서는 O(n^2)으로 느리다. 평균적인 상황에서는 퀵 정렬이 제일 빠르다. 힙 정렬이 제일 안정적인 성능이다. 중복된 데이터가 있을 때는 병합 정렬이 유용하다.
2023.01.11 -
if else if문 - 어디조건만 실행할까?
위에 조건에서 걸리면 밑에 조건문은 검사 안한다. 예를 들어 if() ... else if()... if문에서 걸리면 else if문은 조건 검사하지 않고 넘어간다. 위에 조건에서 걸리도록하면 밑에 조건에 중복되어도 밑에 조건은 검사안하는 거다.
2022.12.31