내가 공부하고 싶은 IT/알고리즘
-
정렬04 - 퀵 정렬(Quick Sort)내가 공부하고 싶은 IT/알고리즘 2019. 11. 28. 16:24
4. 정렬 정렬의 개념들 중 여기서부터 조금씩 복잡하고 이해하기가 까다롭다고 느껴지는데 원리를 이해하고 실제로 코딩해보면 이해하기가 쉽습니다. 저도 아무것도 안보고 코딩하라고 하면 아직까지는 시간이 조금 소요되는 알고리즘이었습니다. 하단의 코드는 위키를 참고하여 작성하였습니다. 퀵 정렬은 피벗(Pivot)을 하나 정하고 리스트를 분할하여 정렬하는 방식입니다. 리스트 중 보통 끝 값을 피벗으로 정하고 리스트 앞에는 피벗보다 작은 값이 존재하도록 하고 뒤쪽에는 피벗보다 큰 값이 위치하도록 하면 됩니다. 원리 예시 1, 10, 4, 6, 7, 2, 5, 9, 3, 8 P 8을 피벗(P)이라고 하면 1, 10, 4, 6, 7, 2, 5, 9, 3, 8 i j P low 값 i와 high값 j를 비교하여 만약 i..
-
정렬03 - 삽입 정렬(Insertion Sort)내가 공부하고 싶은 IT/알고리즘 2019. 11. 28. 14:29
3. 삽입 정렬 삽입 정렬은 배열의 모든 요소를 앞에서부터 차례대로 비교하여, 자신의 위치를 찾아 삽입하는 알고리즘이다. 시간 복잡도는 기존 선택 정렬, 버블 정렬과 마찬가지로 n^2입니다. 선택 정렬, 버블 정렬과 달리 필요할 때만 정렬을 수행하기 때문에 어느 정도 기본적인 정렬이 된 상태라 가정한다면 조금 더 효율적인 정렬 방식이라고 할 수 있습니다. 코드 #include int main(void) { int i, j, temp; int arr[10] = { 1, 10, 4, 6, 7, 2, 5, 3, 9, 8 }; for (i = 0; i = 0 && arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j +..
-
정렬02 - 버블 정렬(Bubble Sort)내가 공부하고 싶은 IT/알고리즘 2019. 11. 28. 14:08
2. 버블 정렬 버블 정렬은 근접한 두 개의 숫자를 비교하여 더 작은 숫자를 앞으로 보내는 정렬 방법입니다. 시간 복잡도는 이전의 선택정렬과 동일하게 n^2이지만 보편적인 상황에서 더 느리게 느껴져 체감상 더 비효율적입니다. 그러나 구현하기에는 더 쉽다는 장점은 있습니다. 코드 #include int main(void) { int i, j, temp; int arr[10] = { 1, 10, 4, 6, 7, 2, 5, 3, 9, 8 }; for (i = 0; i arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } for (i..
-
정렬01 - 선택정렬(Selection Sort)내가 공부하고 싶은 IT/알고리즘 2019. 11. 28. 13:59
기본적인 알고리즘을 차근차근 공부해보고 공부한 내용들을 정리해놓기 위해서 글을 씁니다. Visual Studio를 통해서 코드를 작성하고 자세한 코드는 Github를 통해 관리할 예정입니다. 첫번째는 정렬에 대해서 정리를 해보고자 합니다. 그 중에서도 기본이 되는 선택정렬입니다. 1. 선택정렬 1) 주어진 리스트에서 최소값을 찾는다. 2) 그 값을 맨 앞에 위치한 값과 교체한다. 3) 해당 과정을 반복한다. 코드 #include int main(void) { int i, j, min, temp; int arr[10] = { 1, 10, 4, 6, 7, 2, 5, 3, 9, 8 }; for (i = 0; i < 10; i++) { min = i; for (j = i + 1; j < 10; j++) { if..