73.2 퀵 정렬 함수 사용하기 질문
, Cho Yang hoon님이 작성int compare(const void *a, const void *b) // 오름차순 비교 함수 구현
{ int num1 = *(int *)a; // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴 int num2 = *(int *)b; // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴 if (num1 < num2) // a가 b보다 작을 때는 return -1; // -1 반환 if (num1 > num2) // a가 b보다 클 때는 return 1; // 1 반환 return 0; // a와 b가 같을 때는 0 반환 }
여기 부분에서 0과 -1 과 1을 반환해서 하는 이유를 잘 모르겠습니다. 1이면 교환 하는거고 -1이면 교환 하지 않고 0도 마찬가지로 그대로 두는 식인가요?
그리고
if (arr[j] > arr[j + 1]) // 현재 요소의 값과 다음 요소의 값을 비교하여{ // 큰 값을 temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; // 다음 요소로 보냄 }
이런 식으로 안 쓰고 -1,1,0만 해도 교환이 되는건가요?
혹시 아시는 분 답변해 주시면 감사하겠습니다.
Re: 73.2 퀵 정렬 함수 사용하기 질문
, 도장_ 관리자님이 작성쿽 정렬은 알고리즘 시간에 주로 학습하게 됩니다.
<C 언어 코딩 도장>에서는 C 언어에서 제공하는 쿽 정렬 함수를 이용하는 방법만 설명하고, 알고리즘에 대한 설명은 생략했습니다.
실제로 알고리즘에서는 반드시 배우는 정렬입니다.
동작 원리는
https://gmlwjd9405.github.io/2018/05/10/algorithm-quick-sort.html
를 참고하세요. 인터넷에 좋은 자료는 많이 있고, 좋은 책도 많이 있습니다.
<누구나 자료 구조와 알고리즘>은 쉽게 입문할 수 있고, 퀵 정렬도 잘 설명하고 있습니다.
http://www.yes24.com/Product/Goods/61941073
C 언어에서는 퀵 정렬의 기본 동작은 구현되어 있고, 정렬에 사용할 비교 함수만 정의하면 퀵 정렬을 이용할 수 있습니다. <C 언어 코딩 도장>에서는 비교 함수만 정의하는 방법을 설명합니다. 알고리즘의 세부 동작은 몰라도 이미 구현된 qsort 함수를 사용합니다.
알고리즘 관련 자료를 참고하시면 의문점도 해결될 것 같습니다.