그림 추가 예정
버블정렬은 일반적인 정렬이라고 하면 알 수 있는 정렬방법이다.
정렬 중에는 구현이 간단하고 이해하기도 쉽다.
버블정렬은 인접한 두 데이터를 비교해서 정렬을 진행하는 방식이다.
#include <stdio.h>
void BubbleSort(int arr[], int n);
int main()
{
int arr[4] = {3, 2, 4, 1};
int i;
BubbleSort(arr, sizeof(arr) / sizeof(int));
for (i = 0; i < 4; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
void BubbleSort(int arr[], int n)
{
int i, j;
int temp;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < (n - i) - 1; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
버블 정렬보다 쉽고 간단한 알고리즘이다.
정렬 대상이 있으면 대상을 하나씩 선택해 옮기는 방식의 정렬 알고리즘
#include <stdio.h>
void SelSort(int arr[], int n);
int main()
{
int arr[4] = {3, 2, 4, 1};
int i;
SelSort(arr, sizeof(arr) / sizeof(int));
for (i = 0; i < 4; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
void SelSort(int arr[], int n)
{
int i, j;
int maxIdx;
int temp;
for (i = 0; i < n - 1; i++)
{
maxIdx = i;
for (j = i + 1; j < n; j++)
{
if (arr[j] < arr[maxIdx])
{
maxIdx = j;
}
}
temp = arr[i];
arr[i] = arr[maxIdx];
arr[maxIdx] = temp;
}
}
삽입 정렬은 정렬이 완료된 부분과 완료되지 않은 부분으로 정렬 대상을 두 부분으로 나눠서, 정렬 안 된 부분에 있는 데이터를 정렬 된 부분의 특정 위치에 삽입하면서 정렬을 진행하는 알고리즘이다.
#include <stdio.h>
void InsertSort(int arr[], int n);
int main()
{
int i, j;
int arr[5] = {5, 3, 2, 4, 1};
InsertSort(arr, sizeof(arr) / sizeof(int));
for (i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
void InsertSort(int arr[], int n)
{
int i, j;
int insData;
for (i = 1; i < n; i++)
{
insData = arr[i];
for (j = i - 1; j >= 0; j--)
{
if (arr[j] > insData)
{
arr[j + 1] = arr[j];
}
else
{
break;
}
}
arr[j + 1] = insData;
}
}