선택 정렬(Selection Sort)
: 제자리 정렬
: 불안정 정렬
: 시간 복잡도는 O(n^2)
for i = 0 to n:
a[i]부터 a[n - 1]까지 차례로 비교하여 가장 작은 값이 a[j]에 있다고 하자.
a[i]와 a[j]의 값을 서로 맞바꾼다.
위키피디아에서 가져온 의사코드
이중 선택 정렬
: 한 번의 탐색에서 최솟값과 최댓값을 같이 찾는 방법이다. 탐색 횟수가 절반으로 줄어들게 된다.
탐색을 응용하여 개선
: 한 번의 탐색 때 동일한 값이 있다면 함께 정렬하는 방법. 즉, 만약 최솟값을 찾았는데 그 값과 같은 값이 있다면 다음 번 탐색 때 최솟값으로 탐색될 것이기에 이 값도 탐색된 것으로 보고 미리 정렬한다. 같은 값이 많을수록 유용하게 된다.
#include <stdio.h>
void ft_swap(int *a, int *b)
{
int c;
c = *a;
*a = *b;
*b = c;
}
void selection_sort(int *arr, int n)
{
int i;
int j;
int min;
i = 0;
while (i < n)
{
min = i;
j = i + 1;
while (j < n)
{
if (arr[min] > arr[j])
min = j;
j++;
}
if (min != i)
ft_swap(&arr[i], &arr[min]);
i++;
}
}
https://ko.wikipedia.org/wiki/%EC%84%A0%ED%83%9D_%EC%A0%95%EB%A0%AC
https://mygumi.tistory.com/94
https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=wjdwoaud159&logNo=222365210954&categoryNo=0&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=postView
C언어로 쉽게 풀어쓴 자료구조