Prosto
선택 정렬(Selection Sort) - C언어/자료구조 본문
'선택하여 차례대로 정렬하는 선택정렬'
선택 정렬은 데이터를 정렬하는 방법 중 가장 기본적인 방법으로
첫 번째 자료부터 마지막 자료까지 하나씩 순서대로 정렬해가는 방식입니다.
오름차순이라면 가장 낮은 숫자가 첫 번째, 가장 높은 숫자가 마지막이 되겠죠?
(내림차순이라면 그 반대의 결과가 나오겠죠?)
그렇다면 이 선택 정렬은 어떻게 이루어지는 걸까요?
오름차순을 기준으로 이야기하자면 이렇습니다.
첫 번째 위치인 가장 낮은 값을 찾기 위해서
두 번째부터 마지막까지 낮은 값을 확인하여 첫 번째 값을 결정합니다.
그 과정에서 현재 위치의 값보다 작은 값을 만나면 서로의 값을 교환해줍니다.
그 후 두 번째로 낮은 수를 찾기 위해서
세 번째부터 마지막까지 현재 두 번째 자리의 수보다 낮은 값이 있는지 확인하죠.
마찬가지로 작은 값을 만나서 서로 값을 교환해줍니다.
그렇게 세 번째, 네 번째... 마지막 위치까지 교환을 거쳐서
최종적으로 오름차순으로 정렬된 결과를 받는 정렬 방법입니다.
실제로 5개의 숫자 배열 자료가 어떻게 정렬되는지 확인해볼까요?
7, 4, 10, 3, 5 숫자를
오름차순으로 정렬하는 과정을 보도록 하겠습니다.
가장 먼저 첫 번째 위치를 기준으로 시작됩니다.
현재 첫 번째 위치의 숫자가 7이고,
두 번째 위치의 숫자가 4입니다.
비교 결과 4가 더 작은 숫자이기 때문에 숫자 7과 4를 바꿔줍니다.
첫 번쨰 위치의 숫자가 4가 되었습니다.
다음으로 세 번째 자리인 10과 비교합니다.
비교 결과 기존의 숫자인 4가 더 작기 때문에 바꾸지 않습니다.
다음 자리인 네 번째 숫자 3과 비교합니다.
비교 결과 기존의 숫자인 4보다 3이 작기 때문에 바꿔줍니다.
다음 자리인 다섯 번째 숫자 5와 비교합니다.
비교 결과 기존의 숫자인 3보다 크기 때문에 바꿔지 않습니다.
이렇게 첫 번째 자리의 가장 낮은 숫자는 3으로 결정됐습니다.
그 후 두 번째 바퀴를 돕니다.
두 번째 자리의 7과 세 번째 자리의 10을 비교합니다.
비교 결과 기존의 숫자인 7이 더 작기 때문에 바꾸지 않습니다.
다음으로 네 번째 자리의 4와 비교합니다.
비교 결과 기존의 숫자인 7보다 4가 더 작기 때문에 바꿔줍니다.
다음으로 다섯 번째 자리의 5와 비교합니다.
비교 결과 기존의 숫자인 4가 더 작기 때문에 바꾸지 않습니다.
이렇게 두 번째로 작은 숫자인 4도 결정되었습니다.
그리고 세 번째 바퀴를 돕니다.
세 번째 자리의 10과 네 번째 자리의 7을 비교합니다.
비교 결과 기존의 숫자(10)보다 7이 더 작기 때문에 바꿔줍니다.
기존의 숫자 7과 다섯 번째 자리의 5를 비교합니다.
비교 결과 기존의 숫자(7)보다 5가 더 작기 때문에 바꿔줍니다.
이렇게 세 번째로 작은 숫자인 5도 결정되었습니다.
그리고 네 번째 바퀴를 돕니다.
네 번째 자리의 10과 다섯 번째 자리의 7을 비교합니다.
비교 결과 기존의 숫자(10)보다 7이 더 작기 때문에 바꿔줍니다.
이렇게 네 번째 작은 숫자와 마지막 숫자가 나왔습니다.
다섯 번째 자리는 비교 대상이 없기 떄문에
정렬이 완료됩니다.
그러면 이번에는 C 프로그램으로 확인해볼까요?
원하는 출력 결과를 보고
프로그램 소스를 작성해보세요.
(출력 결과 예)
제가 완성한 소스입니다.
보고 참고하세요.
(복사할 수 있는 소스는 아래 전체복사용보기를 누르시면 됩니다.)
궁금한 점 있으시면 댓글이나 따로 메일로 질문하시면 시간되는 대로 답변드리겠습니다. ( 연락 )
'Programing > C Programing' 카테고리의 다른 글
삽입 정렬(Insertion Sort) - C언어/자료구조 (5) | 2016.10.19 |
---|---|
버블 정렬(Bubble Sort) - C언어/자료구조 (4) | 2016.10.18 |
배열 연습문제 -3 (문제 설명 + 완성 소스) - C언어 (0) | 2016.10.14 |
비주얼 스튜디오 2015 설치 방법 (Visual Studio 2015) (10) | 2016.10.14 |
배열 연습문제 -2 (문제 설명 + 완성 소스) - C언어 (2) | 2016.10.13 |