알고리즘의 설계 방법
실험적 분석방법
이론적 분석방법
분석에 앞서 생각해야 하는 것
의사 코드(Psesude code)
어떠한 알고리즘(동작)의 상위 언어 표현
아래는 알고리즘 동작시간 분석을 위해 꼭 필요한 7개의 기본 함수 그래프입니다.
....
정렬 알고리즘
정렬 알고리즘의 종류
비교 정렬 알고리즘
비교하지 않는 알고리즘
기타 정렬 알고리즘
선택 정렬
현재 위치에 들어갈 값을 찾아 정렬하는 배열이다.
현재 저장될 값의 크기가 크냐 작냐에 따라 최대 선택 정렬과 최소 선택 정렬로 구분할 수 있다.
최소 선택 정렬은 오름차순, 최대 선택 정렬은 내림차순이다.
기본 로직
public static void SelectionSort(ref int[] values, bool flag = true)
{
int count = values.Length;
int tmp;
if (flag == true)
{
//오름차순
for (int i = 0; i < count; i++)
{
for(int j = i + 1; j < count; j++)
{
if (values[i] > values[j])
{
tmp = values[i];
values[i] = values[j];
values[j] = tmp;
}
}
}
return;
}
//내름차순
for (int i = 0; i < count; i++)
{
for (int j = i + 1; j < count; j++)
{
if (values[i] < values[j])
{
tmp = values[i];
values[i] = values[j];
values[j] = tmp;
}
}
}
return;
}
삽입정렬
현재 위치에서 그 이하의 배열들읠 비교하여 자신이 들어갈 위치를 찾아, 그 위치에 삽입하는 정렬 알고리즘이다.
기본 로직
public static void InsertionSort(ref int[] values, bool flag = true)
{
if (flag == true)
{
int count = values.Length;
int i, j;
int tmp;
for(i = 1; i < count; i++)
{
tmp = values[i];
for (j = i - 1; j >= 0; j--)
{
if (tmp < values[j])
{
values[i] = values[j];
values[j] = tmp;
i--;
}
}
}
return;
}
else
{
int count = values.Length;
int i, j;
int tmp;
for (i = 1; i < count; i++)
{
tmp = values[i];
for (j = i - 1; j >= 0; j--)
{
if (tmp > values[j])
{
values[i] = values[j];
values[j] = tmp;
i--;
}
}
}
return;
}
}
버블 정렬
매번 연속된 두 개의 인덱스를 비교하여, 정한 기준의 값을 뒤로 넘겨 정렬한다.
기본 로직
public static void BubbleSort(ref int[] values, bool flag = true)
{
int count = values.Length;
int i, j;
int tmp;
if(flag == true)
{
for (i = 1; count - i > 0; i++)
{
for (j = 1; j < count; j++)
{
tmp = values[j];
if (tmp < values[j - 1])
{
values[j] = values[j - 1];
values[j - 1] = tmp;
}
}
}
return;
}
for (i = 1; count - i > 0; i++)
{
for (j = 1; j < count; j++)
{
tmp = values[j];
if (tmp > values[j - 1])
{
values[j] = values[j - 1];
values[j - 1] = tmp;
}
}
}
return;
}
}
분할 합병 정렬 (Merge Sort)
분할 합병 방식으로 설계된 알고리즘으로 큰 문제를 반으로 쪼개 문제를 해결해 나가는 방식
분할은 배열의 크기가 1보다 작거나 같을 때까지 반복한다.
합병은 두 개의 배열을 비교하여 기준에 맞는 값을 다른 배열에 저장해 나간다.
이 정렬 알고리즘은 분할 과정과 합병 과정이 나뉘어진다.
분할 과정 기본 로직
합병 과정 기본 로직