SlideShare a Scribd company logo
1 of 17
Selection Sort Algorithm
선택 정렬 알고리즘
선택 정렬 알고리즘이란
데이터의 처음부터 끝까지 훑어가며
가장 작은 값을 찾아
그 값을 첫 번째 자리부터 순서대로 자리를 바꾸며
정렬하는 알고리즘이다.
시간복잡도는 O(𝑁2) 이다.
100 68 25 1 15 72
Buf[0] Buf[1] Buf[2] Buf[97] Buf[98] Buf[99]
첫번째 값
선택 정렬 알고리즘의 시간복잡도는 O(𝑁2
) 이다.
비교횟수는 𝑁2
/ 2 로 큰 편이지만
데이터 교환 횟수는 N번이면 충분하기 때문에
데이터의 수가 많은 경우에 유용한 알고리즘이다.
주요 함수
1. void MakeRandomNumber(void)
2. int IsNumberExit(int number, int index)
3. void SelectionSort(void)
4. void DisplayBuffer(void)
1. void MakeRandomNumber(void)
void MakeRandomNumber(void)
{
int i, Num;
i = 1;
srand((unsigned)time(NULL));
Buf[0] = 100;
while(i < MAX){
Num = rand() % MAX;
if(!IsNumberExit(Num, i)){
Buf[i] = Num;
i++;
}
}
}
전역변수인 정수형배열 Buf에
1부터 100까지의 값을
중복없이 무작위로 넣는다.
1. void MakeRandomNumber(void)
void MakeRandomNumber(void)
{
int i, Num;
i = 1;
srand((unsigned)time(NULL));
Buf[0] = 100;
while(i < MAX){
Num = rand() % MAX;
if(!IsNumberExit(Num, i)){
Buf[i] = Num;
i++;
}
}
}
Num에 무작위로 값을 넣는다.
1. void MakeRandomNumber(void)
void MakeRandomNumber(void)
{
int i, Num;
i = 1;
srand((unsigned)time(NULL));
Buf[0] = 100;
while(i < MAX){
Num = rand() % MAX;
if(!IsNumberExit(Num, i)){
Buf[i] = Num;
i++;
}
}
}
방금 대입한 Num의 값이 중복
인지를 확인하기 위해
IsNumberExit를 사용한다.
1. void MakeRandomNumber(void)
void MakeRandomNumber(void)
{
int i, Num;
i = 1;
srand((unsigned)time(NULL));
Buf[0] = 100;
while(i < MAX){
Num = rand() % MAX;
if(!IsNumberExit(Num, i)){
Buf[i] = Num;
i++;
}
}
}
중복된 값이 없으면 Buff에 값
을 순서대로 넣는다.
2. int IsNumberExit(int number, int index)
int IsNumberExit(int number, int index)
{
int i;
for(i=0;i<index;i++){
if(Buf[i] == number || number == 0)
return TRUE;
}
return FALSE;
}
Buf에 매개변수 number와 같
은 값이 있는지를 검사한다.
2. int IsNumberExit(int number, int index)
int IsNumberExit(int number, int index)
{
int i;
for(i=0;i<index;i++){
if(Buf[i] == number || number == 0)
return TRUE;
}
return FALSE;
}
Buf의 인덱스값만큼 반복해서
Buf의 값이 numbe와 같거나 0
이면 TRUE를 반환한다.
같은 값이 없으면 FALSE를 반
환한다.
3. void SelectionSort(void)
void SelectionSort(void)
{
int i, j, min, dummy;
for(i=0;i<MAX;i++){
min = i;
for(j=i+1;j<MAX;j++)
if(Buf[j] < Buf[min])
min = j;
dummy = Buf[min];
Buf[min] = Buf[i];
Buf[i] = dummy;
}
}
Buf의 값을 선택정렬한다.
3. void SelectionSort(void)
void SelectionSort(void)
{
int i, j, min, dummy;
for(i=0;i<MAX;i++){
min = i;
for(j=i+1;j<MAX;j++)
if(Buf[j] < Buf[min])
min = j;
dummy = Buf[min];
Buf[min] = Buf[i];
Buf[i] = dummy;
}
}
Buf의 인덱스 값만큼 반복
100 68 25 1 15 72
Buf[0] Buf[1] Buf[2] Buf[97] Buf[98] Buf[99]
0
min
3. void SelectionSort(void)
void SelectionSort(void)
{
int i, j, min, dummy;
for(i=0;i<MAX;i++){
min = i;
for(j=i+1;j<MAX;j++)
if(Buf[j] < Buf[min])
min = j;
dummy = Buf[min];
Buf[min] = Buf[i];
Buf[i] = dummy;
}
}
인덱스 값 i를 i+1부터 MAX-1
의 범위까지 반복하면서 가장
작은값을 찾는다. 가장 작은값
은 min에 대입한다.
100 68 25 1 15 72
Buf[0] Buf[1] Buf[2] Buf[97] Buf[98] Buf[99]
97
min
3. void SelectionSort(void)
void SelectionSort(void)
{
int i, j, min, dummy;
for(i=0;i<MAX;i++){
min = i;
for(j=i+1;j<MAX;j++)
if(Buf[j] < Buf[min])
min = j;
dummy = Buf[min];
Buf[min] = Buf[i];
Buf[i] = dummy;
}
}
가장 작은 값을
I번째 값과 스왑한다.
100 68 25 1 15 72
Buf[0] Buf[1] Buf[2] Buf[97] Buf[98] Buf[99]
97
min
dummy
1
100
1
3. void SelectionSort(void)
void SelectionSort(void)
{
int i, j, min, dummy;
for(i=0;i<MAX;i++){
min = i;
for(j=i+1;j<MAX;j++)
if(Buf[j] < Buf[min])
min = j;
dummy = Buf[min];
Buf[min] = Buf[i];
Buf[i] = dummy;
}
}
가장 작은 값을
I번째 값과 스왑한다.
1 68 25 100 15 72
Buf[0] Buf[1] Buf[2] Buf[97] Buf[98] Buf[99]
97
min
1
dummy
4. void DisplayBuffer(void)
void DisplayBuffer(void)
{
int i;
for(i=0;i<MAX;i++){
if((i%10) == 0)
printf("n");
printf("%d ",Buf[i]);
}
printf("n");
}
Buf의 값을 순서대로 출력한다.
- 끝 -

More Related Content

What's hot

튜터링 #10 20120416
튜터링 #10 20120416튜터링 #10 20120416
튜터링 #10 20120416Jong Hyuck Lim
 
RNC C++ lecture_5 Array
RNC C++ lecture_5 ArrayRNC C++ lecture_5 Array
RNC C++ lecture_5 Arrayitlockit
 
Shell Sort Algorithm (셸 정렬 알고리즘)
Shell Sort Algorithm (셸 정렬 알고리즘)Shell Sort Algorithm (셸 정렬 알고리즘)
Shell Sort Algorithm (셸 정렬 알고리즘)Junyeong Choi
 
게임프로그래밍입문 4주차
게임프로그래밍입문 4주차게임프로그래밍입문 4주차
게임프로그래밍입문 4주차Yeonah Ki
 
게임프로그래밍입문 5주차
게임프로그래밍입문 5주차게임프로그래밍입문 5주차
게임프로그래밍입문 5주차Yeonah Ki
 
게임프로그래밍입문 3주차
게임프로그래밍입문 3주차게임프로그래밍입문 3주차
게임프로그래밍입문 3주차Yeonah Ki
 
2.1 부동소수점 비법들
2.1 부동소수점 비법들2.1 부동소수점 비법들
2.1 부동소수점 비법들준섭 김
 
DP Optimization
DP OptimizationDP Optimization
DP Optimization승혁 조
 
포인터와 배열
포인터와 배열포인터와 배열
포인터와 배열Kim YoSep
 
Item 30 int 상수 대신 enum을 사용하자
Item 30 int 상수 대신 enum을 사용하자Item 30 int 상수 대신 enum을 사용하자
Item 30 int 상수 대신 enum을 사용하자Sungho Moon
 

What's hot (12)

Initializer list
Initializer listInitializer list
Initializer list
 
튜터링 #10 20120416
튜터링 #10 20120416튜터링 #10 20120416
튜터링 #10 20120416
 
RNC C++ lecture_5 Array
RNC C++ lecture_5 ArrayRNC C++ lecture_5 Array
RNC C++ lecture_5 Array
 
Shell Sort Algorithm (셸 정렬 알고리즘)
Shell Sort Algorithm (셸 정렬 알고리즘)Shell Sort Algorithm (셸 정렬 알고리즘)
Shell Sort Algorithm (셸 정렬 알고리즘)
 
게임프로그래밍입문 4주차
게임프로그래밍입문 4주차게임프로그래밍입문 4주차
게임프로그래밍입문 4주차
 
게임프로그래밍입문 5주차
게임프로그래밍입문 5주차게임프로그래밍입문 5주차
게임프로그래밍입문 5주차
 
게임프로그래밍입문 3주차
게임프로그래밍입문 3주차게임프로그래밍입문 3주차
게임프로그래밍입문 3주차
 
2.1 부동소수점 비법들
2.1 부동소수점 비법들2.1 부동소수점 비법들
2.1 부동소수점 비법들
 
DP Optimization
DP OptimizationDP Optimization
DP Optimization
 
포인터와 배열
포인터와 배열포인터와 배열
포인터와 배열
 
Item 30 int 상수 대신 enum을 사용하자
Item 30 int 상수 대신 enum을 사용하자Item 30 int 상수 대신 enum을 사용하자
Item 30 int 상수 대신 enum을 사용하자
 
Python 스터디
Python 스터디Python 스터디
Python 스터디
 

Selection Sort Algorithm(선택 정렬 알고리즘)

  • 1. Selection Sort Algorithm 선택 정렬 알고리즘
  • 2. 선택 정렬 알고리즘이란 데이터의 처음부터 끝까지 훑어가며 가장 작은 값을 찾아 그 값을 첫 번째 자리부터 순서대로 자리를 바꾸며 정렬하는 알고리즘이다. 시간복잡도는 O(𝑁2) 이다. 100 68 25 1 15 72 Buf[0] Buf[1] Buf[2] Buf[97] Buf[98] Buf[99] 첫번째 값
  • 3. 선택 정렬 알고리즘의 시간복잡도는 O(𝑁2 ) 이다. 비교횟수는 𝑁2 / 2 로 큰 편이지만 데이터 교환 횟수는 N번이면 충분하기 때문에 데이터의 수가 많은 경우에 유용한 알고리즘이다.
  • 4. 주요 함수 1. void MakeRandomNumber(void) 2. int IsNumberExit(int number, int index) 3. void SelectionSort(void) 4. void DisplayBuffer(void)
  • 5. 1. void MakeRandomNumber(void) void MakeRandomNumber(void) { int i, Num; i = 1; srand((unsigned)time(NULL)); Buf[0] = 100; while(i < MAX){ Num = rand() % MAX; if(!IsNumberExit(Num, i)){ Buf[i] = Num; i++; } } } 전역변수인 정수형배열 Buf에 1부터 100까지의 값을 중복없이 무작위로 넣는다.
  • 6. 1. void MakeRandomNumber(void) void MakeRandomNumber(void) { int i, Num; i = 1; srand((unsigned)time(NULL)); Buf[0] = 100; while(i < MAX){ Num = rand() % MAX; if(!IsNumberExit(Num, i)){ Buf[i] = Num; i++; } } } Num에 무작위로 값을 넣는다.
  • 7. 1. void MakeRandomNumber(void) void MakeRandomNumber(void) { int i, Num; i = 1; srand((unsigned)time(NULL)); Buf[0] = 100; while(i < MAX){ Num = rand() % MAX; if(!IsNumberExit(Num, i)){ Buf[i] = Num; i++; } } } 방금 대입한 Num의 값이 중복 인지를 확인하기 위해 IsNumberExit를 사용한다.
  • 8. 1. void MakeRandomNumber(void) void MakeRandomNumber(void) { int i, Num; i = 1; srand((unsigned)time(NULL)); Buf[0] = 100; while(i < MAX){ Num = rand() % MAX; if(!IsNumberExit(Num, i)){ Buf[i] = Num; i++; } } } 중복된 값이 없으면 Buff에 값 을 순서대로 넣는다.
  • 9. 2. int IsNumberExit(int number, int index) int IsNumberExit(int number, int index) { int i; for(i=0;i<index;i++){ if(Buf[i] == number || number == 0) return TRUE; } return FALSE; } Buf에 매개변수 number와 같 은 값이 있는지를 검사한다.
  • 10. 2. int IsNumberExit(int number, int index) int IsNumberExit(int number, int index) { int i; for(i=0;i<index;i++){ if(Buf[i] == number || number == 0) return TRUE; } return FALSE; } Buf의 인덱스값만큼 반복해서 Buf의 값이 numbe와 같거나 0 이면 TRUE를 반환한다. 같은 값이 없으면 FALSE를 반 환한다.
  • 11. 3. void SelectionSort(void) void SelectionSort(void) { int i, j, min, dummy; for(i=0;i<MAX;i++){ min = i; for(j=i+1;j<MAX;j++) if(Buf[j] < Buf[min]) min = j; dummy = Buf[min]; Buf[min] = Buf[i]; Buf[i] = dummy; } } Buf의 값을 선택정렬한다.
  • 12. 3. void SelectionSort(void) void SelectionSort(void) { int i, j, min, dummy; for(i=0;i<MAX;i++){ min = i; for(j=i+1;j<MAX;j++) if(Buf[j] < Buf[min]) min = j; dummy = Buf[min]; Buf[min] = Buf[i]; Buf[i] = dummy; } } Buf의 인덱스 값만큼 반복 100 68 25 1 15 72 Buf[0] Buf[1] Buf[2] Buf[97] Buf[98] Buf[99] 0 min
  • 13. 3. void SelectionSort(void) void SelectionSort(void) { int i, j, min, dummy; for(i=0;i<MAX;i++){ min = i; for(j=i+1;j<MAX;j++) if(Buf[j] < Buf[min]) min = j; dummy = Buf[min]; Buf[min] = Buf[i]; Buf[i] = dummy; } } 인덱스 값 i를 i+1부터 MAX-1 의 범위까지 반복하면서 가장 작은값을 찾는다. 가장 작은값 은 min에 대입한다. 100 68 25 1 15 72 Buf[0] Buf[1] Buf[2] Buf[97] Buf[98] Buf[99] 97 min
  • 14. 3. void SelectionSort(void) void SelectionSort(void) { int i, j, min, dummy; for(i=0;i<MAX;i++){ min = i; for(j=i+1;j<MAX;j++) if(Buf[j] < Buf[min]) min = j; dummy = Buf[min]; Buf[min] = Buf[i]; Buf[i] = dummy; } } 가장 작은 값을 I번째 값과 스왑한다. 100 68 25 1 15 72 Buf[0] Buf[1] Buf[2] Buf[97] Buf[98] Buf[99] 97 min dummy 1 100 1
  • 15. 3. void SelectionSort(void) void SelectionSort(void) { int i, j, min, dummy; for(i=0;i<MAX;i++){ min = i; for(j=i+1;j<MAX;j++) if(Buf[j] < Buf[min]) min = j; dummy = Buf[min]; Buf[min] = Buf[i]; Buf[i] = dummy; } } 가장 작은 값을 I번째 값과 스왑한다. 1 68 25 100 15 72 Buf[0] Buf[1] Buf[2] Buf[97] Buf[98] Buf[99] 97 min 1 dummy
  • 16. 4. void DisplayBuffer(void) void DisplayBuffer(void) { int i; for(i=0;i<MAX;i++){ if((i%10) == 0) printf("n"); printf("%d ",Buf[i]); } printf("n"); } Buf의 값을 순서대로 출력한다.