하랑이 코딩

컴퓨터공학/알고리즘

알고리즘 - 선택정렬(selection sort) c#

하랑이~! 2024. 6. 6. 15:00

선택정렬(selection sort)


가장 작은 것을 선택해서 제일 앞으로 보내면 어떨까? 해서 나온 답이 >> 선택 정렬은 정렬되지 않은 데이터들에 대해 가장 작은 데이터를 찾아 가장 앞의 데이터와 교환해 나가는 방식이다.

 

선택정렬 과정

  1. 리스트에서 최소값을 찾는다.
  2. 최소값을 맨 앞의 값과 교체한다. (Swap)
  3. 교체한 맨 앞의 데이터는 정렬된 것으로 간주하고 다음 인덱스부터 1, 2 행위를 끝까지 반복한다.

 

선택정렬(selection sort) 이론


한번 지금 아래사진 선택 정렬 해보겠습니다.

1

 

지금 아래사진처럼 5와 1에 위치를 변경했습니다.

2

이 과정을 계속해보겠습니다.

 

3

 

4

 

이렇게 선택정렬이 다 되었습니다. 이제 그림으로 다 봤으니 코드로 보겠습니다

 

 

선택정렬(selection sort) 코드


using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        List<int> list = new List<int> { 5, 4, 1, 2, 3 };
        Console.WriteLine("정렬 하기 전 리스트 안:");
        PrintList(list);

        SelectionSort(list);

        Console.WriteLine("정렬 하기 후 리스트 안:");
        PrintList(list);
    }

    static void SelectionSort(List<int> list)
    {
        int n = list.Count;

        for (int i = 0; i < n - 1; i++)
        {
            // 최소값의 인덱스를 찾음
            int minIndex = i;
            for (int j = i + 1; j < n; j++)
            {
                if (list[j] < list[minIndex])
                {
                    minIndex = j;
                }
            }

            // 최소값을 정렬되지 않은 부분의 첫 번째 요소와 교환
            int temp = list[minIndex];
            list[minIndex] = list[i];
            list[i] = temp;
        }
    }

    static void PrintList(List<int> list)
    {
        foreach (int item in list)
        {
            Console.Write(item + " ");
        }
        Console.WriteLine();
    }
}

 

728x90