#include <stdio.h>
#define Number_Size 5 //define을 통해 Number_Size는 5라고 정의
/*
선택 정렬
*/
main()
{
int number[Number_Size] = { 5, 90, 1, 88, 15 }; //정렬하려는 대상
int i, j;
int count = 1;
printf("현재 숫자 출력 : ");
for (i = 0; i < Number_Size; i++) //원래 숫자배열 출력
{
printf("%d ", number[i]);
}
for (i = 0; i < Number_Size-1; i++) //선택 정렬, 오름차순
{
for (j = i+1; j < Number_Size; j++)
{
if (number[i] > number[j])
{
int temp; //숫자의 자리를 바꾸기 위한 임시 변수
temp = number[i];
number[i] = number[j];
number[j] = temp;
}
printf("\n%d번째 정렬 수행 : ", count++);
for (int k = 0; k < Number_Size; k++)
{
printf("%d ", number[k]);
}
printf("\n");
}
}
printf("\n정렬 후 최종 출력 : ");
for (i = 0; i < Number_Size; i++)
{
printf("%d ", number[i]);
}
printf("\n");
}
결과
설명
선택 정렬은 하나,하나 비교를 통해 값을 정렬 합니다.
오름차순(작은수가 처음) 선택 정렬을 기준으로 설명 드리자면
우선 배열에 들어있는 값 중, 제일 작은게 첫번째로 와야 겠죠 ?
그럼 배열의 0번 인덱스의 수부터 자기 자신을 제외한 수와 비교를 수행합니다.
그림에서 보는것처럼 제일 처음수를 기준으로 4번의 연산(총 5개의 크기를 가진 배열에서 자기 자신을 제외)을 수행합니다.
그렇게 되면 배열에 첫번째에 제일 작은 값이 들어오겠죠?
그럼 정렬이 수행된것입니다.
이제 1번 인덱스를 기준으로 같은 연산을 수행합니다.
0번에는 제일 작은수가 들어가 있으니 할 필요가 없고, 자기자신과도 할 필요가 없으니 자기보다 큰 인덱스의 값들과 비교를 통해 두번째로 작은수가 1번 인덱스로 들어가 지게 되겠죠?
연산의 수는 위의 식과 같습니다.
배열의 크기가 5라면 총 10번의 연산을 수행합니다.
이상 선택정렬 이었습니다.
'IT프로그래밍' 카테고리의 다른 글
자바 for문 / java for 문 / 자바 for문 예제 / java for문 예제 / 자바 for문 별 / 자바 반복문 (0) | 2015.01.26 |
---|---|
jsp session 속성 / jsp session 설명 / jsp 세션 속성 (0) | 2015.01.13 |
PHP 변수 전달 / PHP 자료 넘기기 / HTML 자료 넘기기 / POST, GET 방식 차이 / PHP 기초, HTML 기초 (1) | 2015.01.12 |
<input type = "button"> / input type = button 으로 링크 걸기 설명 + 주의 (0) | 2015.01.12 |
c언어 계산기 / c언어 계산기 소스 / c로 만든 계산기 (0) | 2015.01.11 |
C언어 구구단 출력 / C언어 구구단 / C 구구단 소스 (0) | 2015.01.11 |
My Bulletin Board (0) | 2015.01.09 |
스크립트 버튼 동작 (0) | 2014.12.31 |
댓글