선택정렬, 셀렉션 소트, selection sort 모두 같은말입니다.
3 1 4 2
이 네 개의 숫자를 가지고 선택정렬 하는 과정을 간단하게 설명한 후 소스도 적어볼게요
시작하기 전에 제가 말하는 배열번호란 배열의 인덱스를 말하며 4개의 숫자를 배열에 담으면 0~3 까지 입니다.
arr[0], arr[1], arr[2],arr[3]
오름차순 정렬(현재 배열에서 가장 작은 값을 찾아서 맨 앞자리의 숫자와 교환 합니다.)
처음 3이 저장된 배열의 번호를 기억하고 시작합니다.
- 3과 1을 비교 합니다. 뒷 자리의 1이 더 작으므로 1이 들어있는 배열번호(1)를 기억합니다.
- 1과 4를 비교 합니다. 앞 자리의 1이 더 작으므로 다음 단계로.
- 1과 2를 비교 합니다. 앞 자리의 1이 더 작으므로 다음 단계로.
- arr[0]번지에 3과 , 현재 가장 작은 수인 arr[1](1은 아까 기억한 배열번호)을 교환해 줍니다.
1회 순환 후 : 1 3 4 2
맨 앞자리에는 이미 가장 작은 수가 들어가 있기 때문에 건너 띄어 2번째 자리 부터 위 과정들과 같이 비교합니다.
-- 3과 4를 비교 합니다. 앞 자리 3의 값이 더 작으므로 다음 단계로.
-- 3과 2를 비교 합니다. 뒷 자리의 2가 값이 더 작으므로 2가 들어있는 배열번호(3)를 기억합니다.
--arr[1]번지의 3과, 두 번째 순환에서 가장 작은 수인 2(배열번호=3), 즉 arr[3]의 값을 교환 합니다.
2회 순환 후 : 1 2 4 3
역시 두 번째 자리까진 정렬이 끝난 상태임을 알고 있으므로, 3번째 자리부터 시작
--- 4와 3을 비교합니다. 뒷 자리의 3이 더 크므로 3이 들어있는 배열번호(3)를 기억합니다.
--- arr[2]의 값 4와, 세 번째 순환에서 가장 작은 수인arr[3]의 값 3을 교환 합니다.
3회 순환 후 : 1 2 3 4
정렬 완료.
@ 소스
#include <stdio.h> #define N 10
int main() { int arr[]={3, 1, 5, 4, 2, 6, 7, 9, 8, 0}; int i, j, index, temp;
for (i = 0; i < N - 1; i++) { index = i; for (j = i + 1; j < N; j++) { if (arr[index] > arr[j]) { index = j; } } temp = arr[index]; arr[index] = arr[i]; arr[i] = temp; }
for(i=0;i<10;i++) printf("%d ",arr[i]);
return 0; } |
0~9까지의 임의의 순서대로 나열된 숫자를 오름차순으로 선택정렬하는 소스 입니다. |
선택정렬 소스도 단 한 부분만 수정하면 오름차순 정렬에서 내림차순작업을 하도록 변경 할 수 있습니다.
어디일까요??
.
.
.
.
@ .내림차순 정렬(위(오름차순) 소스와 부등호의 방향 하나만 차이납니다.)
#include <stdio.h> #define N 10
int main() { int arr[]={3, 1, 5, 4, 2, 6, 7, 9, 8, 0}; int i, j, index, temp;
for (i = 0; i < N - 1; i++) { index = i; for (j = i + 1; j < N; j++) { if (arr[index] < arr[j]) { index = j; } } temp = arr[index]; arr[index] = arr[i]; arr[i] = temp; }
for(i=0;i<10;i++) printf("%d ",arr[i]);
return 0; } |
찾으셨나 모르겠네요 부등호( < , >) 의 방향을 하나만 바꾸었는데요... |
'IT > Programing' 카테고리의 다른 글
c언어 삽입정렬 (0) | 2013.12.13 |
---|---|
c언어 스택 구현(자료구조) (1) | 2013.12.11 |
c언어 큐(que), 자료구조 (0) | 2013.12.10 |