-
C언어 선택 정렬Visual Studio/C 실전 2015. 3. 31. 11:17
예를 들어서, 4, 1, 3, 2, 5라는 숫자들이 있는데, 순서를 맞추기 위해 정렬하는 기법 중에 하나입니다.
1회전, 맨 앞의 숫자와 그 다음 숫자를 비교합니다.
1, 4, 3, 2, 5 -> 4가 1보다 크므로 두 숫자의 위치를 변경합니다.
1, 4, 3, 2, 5 -> 1이 2보다 작으므로 그대로 둡니다.
1, 4, 3, 2, 5 -> 1이 5보다 작으므로 그대로 둡니다.
2회전, 두 번째 숫자와 그 다음 숫자를 비교합니다.
1, 3, 4, 2 ,5 -> 4가 3보다 크므로 두 숫자의 위치를 변경합니다.
1, 2, 4, 3, 5 -> 3이 2보다 크므로 두 숫자의 위치를 변경합니다.
1, 2, 4, 3, 5 -> 2가 5보다 작으므로 그대로 둡니다.
이런 식으로 마지막 까지 반복합니다.
이제 10개의 숫자를 입력받아 선택정렬 하는 프로그램의 예제를 보겠습니다.
#include <stdio.h>
#define MAX 10int i;
void selection(); //selction 함수 선언
int data[MAX];main() {
for(i = 0; i < MAX; i++){
printf("%d번째 값을 입력하세요 : ",i+1);
scanf("%d", &data[i]);}
printf("입력 받은 값 : ");
for (i = 0; i < MAX; i++)
printf("%d ", data[i]);
selection(); //selection 함수 호출
}
void selection() {
int x, y, temp;
for(x = 0; x < MAX-1; x++) { // x가 10일 때 y와 비교할 내용이 없으므로 y보다//작아야 합니다.
y = x + 1;
for(y = x + 1; y < MAX; y++) {
if(data[x] > data[y]) {
temp = data[x];
data[x] = data[y];
data[y] = temp;
}
}
}
printf("\n최종 결과값 : ");
for(x = 0; x < MAX; x++)
printf("%d ", data[x]);
printf("\n");
}먼저 입력받은 10가지의 숫자를 저장할 배열 data를 선언합니다.
그리고 각 숫자를 비교하면서 배열에 저장되어 있는 숫자를 교환을 해야 하는데, 바로 교환을 하게 되면 하나의 값은 변경이 되지 않습니다.
그래서 temp 변수를 선언하여 임시적으로 교환할 값을 저장하여 교환을 해야 합니다.
temp = data[x];
data[x] = data[y];
data[y] = temp;'Visual Studio > C 실전' 카테고리의 다른 글
C언어 도서관 좌석 예약 프로그램 (8) 2015.06.19 C언어 버블 정렬 (1) 2015.03.31 100명의 신상 정보를 관리하는 프로그램 (0) 2012.09.23