void swap(int* array, int left, int right)
{
// 배열의 left index와 right index의 값을 교환하는 함수
int temp = array[right];
array[right] = array[left];
array[left] = temp;
}
void bubbleSort(int* array, int size, bool ascending)
{
// 버블 정렬 구현.
int end = size - 1;
if (ascending == true)
{
while(end)
{
// 가장 큰 값을 오른쪽으로 이동시킨다.
for (int i = 0; i < end; ++i)
{
if (array[i] > array[i + 1])
{
swap(array, i, i + 1);
}
}
--end;
}
}
else
{
while(end)
{
// 가장 작은 값을 왼쪽으로 이동시킨다.
for (int i = end; i > 0; --i)
{
if (array[i - 1] < array[i])
{
swap(array, i - 1, i);
}
}
--end;
}
}
}


오름차순
내림차순
void swap(int* array, int left, int right)
{
int temp = array[right];
array[right] = array[left];
array[left] = temp;
}
void selectionSort(int* array, int size, bool ascending)
{
int end = size - 1;
int start = 0;
if (size < 2)
{
return;
}
if (ascending == true)
{
while(start < end)
{
int swapIndex = -1;
int minValue = array[start];
for (int i = start + 1; i < size; ++i)
{
if (minValue > array[i])
{
minValue = array[i];
swapIndex = i;
}
}
if (swapIndex != -1)
{
swap(array, start, swapIndex);
}
++start;
}
}
else
{
while(start < end)
{
int swapIndex = -1;
int maxValue = array[start];
for (int i = start + 1; i < size; ++i)
{
if (maxValue < array[i])
{
maxValue = array[i];
swapIndex = i;
}
}
if (swapIndex != -1)
{
swap(array, start, swapIndex);
}
++start;
}
}
}

swapIdx가 -1이 아닌 경우에만 현재 start Index에 존재하는 값과 swapIdx에 존재하는 값을 서로 바꿔준다.
이를 반복하면 왼쪽부터 가장 작은 값이 채워진다.
void insertionSort(int* array, int size, bool ascending)
{
// 1. 배열 사이즈가 1이하이면 정렬할 필요가 없음.
if (size < 2)
{
return;
}
int i, j, key;
if (ascending)
{
// 오름차순.
//
// 2. 배열의 두번째부터 선택
for (i = 1; i < size; ++i)
{
key = array[i];
for (j = i - 1; j >= 0 && array[j] > key; --j)
{
array[j + 1] = array[j];
}
array[j + 1] = key;
}
}
else
{
// 내림차순
for (i = 1; i < size; ++i)
{
key = array[i];
for (j = i - 1; j >= 0 && array[j] < key; --j)
{
array[j + 1] = array[j];
}
array[j + 1] = key;
}
}
}


[ 7, 6, 5, 4, 3, 2, 1 ] 형태의 배열의 경우
key값이 i의 시작 index인 1에서 해당하는 값인 6부터 시작되고 6은 앞의 0번 인덱스까지 비교했을 때 6보다 작은 값이 나오지 않았으므로, 6과 7이 교환됩니다.
이러한 과정이 반복되어 예시로 key값이 4이고 i가 3인 경우에는 배열의 형태가 [5, 6, 7, 4, 3, 2, 1] 의 형태일 것인데, key는 4, i는 3이고 앞의 index 0, 1, 2가 가지고 있는 값은 4보다 작으므로,
array[3] = array[2] | array[2] = array[1]
| array[1] = array[0] 을 수행하면
[5, 5, 6, 7, 3, 2, 1]의 배열 형태가 되며, 배열의 끝까지 순회했으므로 j의 값은 -1이 됩니다.
key에 저장된 값을 array[j + 1] 에 제공하면 마지막으로 형태는 [4, 5, 6, 7, 3, 2, 1]의 형태가 됩니다.
이러한 과정을 반복하여 선택정렬이 수행됩니다.
정렬 정리해보면 뭔가 기본이 튼튼해지는 느낌이 들더라구용
잘읽었습니다!