[C언어 스터디 - 15] 정렬 (sort)
2020. 7. 5. 11:00ㆍ03. Resources/C, C++
728x90
반응형
C언어 정렬 정리
참고 문헌 (Ch 73) : https://dojang.io/mod/page/view.php?id=637
거품 정렬 구현하기
가장 기본적인 정렬 방법으로 처음부터 끝까지 값을 비교하면서 하나하나 바꾸는 정렬 방법
#include <stdio.h>
void bubble_sort(int arr[], int count) // 매개변수로 정렬할 배열과 요소의 개수를 받음
{
int temp;
for (int i = 0; i < count; i++) // 요소의 개수만큼 반복
{
for (int j = 0; j < count - 1; j++) // 요소의 개수 - 1만큼 반복
{
if (arr[j] > arr[j + 1]) // 현재 요소의 값과 다음 요소의 값을 비교하여
{ // 큰 값을
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp; // 다음 요소로 보냄
}
}
}
}
int main()
{
int numArr[10] = { 8, 4, 2, 5, 3, 7, 10, 1, 6, 9 }; // 정렬되지 않은 배열
bubble_sort(numArr, sizeof(numArr) / sizeof(int)); // 거품 정렬 함수 호출
for (int i = 0; i < 10; i++)
{
printf("%d ", numArr[i]); // 1 2 3 4 5 6 7 8 9 10
}
printf("\n");
return 0;
}
퀵 정렬 함수 사용하기
퀵 정렬 함수는 C언어에서 제공해준다. 정렬할 배열이나 메모리 주소, 요소 개수, 요소 크기, 비교 함수를 넣어서 진행한다.
- qsort(정렬할 배열, 요소 개수, 요소 크기, 비교 함수);
- qsort(정렬할 메모리 주소, 요소 개수, 요소 크기, 비교 함수);
비교 함수란 각 요소를 어떻게 비교할 것인지 알려주는 함수를 의미한다. 이는 직접 구현해서 넣어주어야 한다.
#include <stdio.h>
#include <stdlib.h> // qsort 함수가 선언된 헤더 파일
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 반환
// // 내림차순 정렬 조건
// if (num1 < num2) // a가 b보다 작을 때는
// return 1; // 1 반환
// if (num1 > num2) // a가 b보다 클 때는
// return -1; // -1 반환
// return 0; // a와 b가 같을 때는 0 반환
}
int main()
{
int numArr[10] = { 8, 4, 2, 5, 3, 7, 10, 1, 6, 9 }; // 정렬되지 않은 배열
// 정렬할 배열, 요소 개수, 요소 크기, 비교 함수를 넣어줌
qsort(numArr, sizeof(numArr) / sizeof(int), sizeof(int), compare);
for (int i = 0; i < 10; i++)
{
printf("%d ", numArr[i]); // 1 2 3 4 5 6 7 8 9 10
}
printf("\n");
return 0;
}
반응형
'03. Resources > C, C++' 카테고리의 다른 글
[따배씨++/C++] 강의 정리를 여기에 하자! (0) | 2021.08.01 |
---|---|
[C언어 스터디 - 16] 2차원 배열 정렬 (Sort 2D Array) (0) | 2020.07.06 |
[C언어 스터디 - 14] 구조체를 입력으로 이용하는 함수 (function using struct as input) (0) | 2020.07.04 |
[C언어 스터디 - 13] 배열을 입력으로 이용하는 함수 (function using array as input) (0) | 2020.07.03 |
[C언어 스터디 - 12] 포인터를 입력으로 이용하는 함수 (function using pointers as inputs) (0) | 2020.07.02 |