반응형

선택정렬, 셀렉션 소트, 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;

}

찾으셨나 모르겠네요

부등호( < , >) 의 방향을 하나만 바꾸었는데요...




반응형

'Computer > Programing' 카테고리의 다른 글

c언어 삽입정렬  (0) 2013.12.13
c언어 스택 구현(자료구조)  (1) 2013.12.11
c언어 큐(que), 자료구조  (0) 2013.12.10

+ Recent posts