언어 자료구조 알고리즘/C언어 예제

[C언어 소스] 선택 정렬(Selection Sort) 알고리즘

언제나휴일 2016. 4. 11. 17:34
반응형

선택 정렬 (Selection Sort)

 

 이번에는 반복 알고리즘일 이용하는 선택 정렬 알고리즘을 알아봅시다.

 

 선택 정렬 알고리즘은 제일 큰 값을 찾아 맨 뒤의 요소와 교체하는 방법을 반복하여 전체를 정렬하는 알고리즘입니다. 물론 제일 작은 값을 찾아 맨 앞의 요소와 교체하는 방법을 반복할 수도 있습니다.

 

 선택 정렬 알고리즘을 의사코드(pseudo code: 논리적인 수행 흐름을 이해할 수 있게 작성한 코드)는 다음과 같습니다.

 

선택 정렬(base:컬렉션,n:원소 개수,compare:비교 논리)

    반복(i:=n;  i>1  ; i:= i-1)

        반복(max=0,j:=1; j<i ; j:=j+1)

            조건(compare(base[max], base[j]) < 0)

                max := j

        temp: = base[i-1]

        base[i-1] = base[max]

        base[max] = temp


선택 정렬 알고리즘 실행 결과

선택정렬


선택 정렬(Selection Sort).c

 

//선택 정렬(Selection Sort)

#include <stdio.h>

 

#define SWAP(a,b)  {int t; t = a; a=b; b=t;}//a b를 교환

 

void SelectionSort(int *base, int n);

int main(void)

{

    int arr[10] = { 9,4,3,10,5,8,7,6,2,1 };

    SelectionSort(arr, 10);

    return 0;

}

void ViewArr(int *arr, int n);

void SelectionSort(int *base, int n)

{

    int i, j;

    int maxi;

    ViewArr(base, n);//현재 상태 출력

    for (i = n; i>1; i--)//정렬할 범위를 축소해 나갑니다.

    {

        maxi = 0;

        for (j = 1; j<i; j++)

        {

            if (base[maxi]<base[j])//더 큰 원소를 만나면

            {

                maxi = j;

            }

        }

        SWAP(base[maxi], base[i - 1]);//교환

        ViewArr(base, n);//상태 출력

    }

}

 

void ViewArr(int *arr, int n)

{

    int i = 0;

    for (i = 0; i<n; i++)

    {

        printf("%2d ", arr[i]);

    }

    printf("\n");

}

 

자세히 보기

C++

반응형