본문 바로가기
프로그래밍/Algorithm

C# 선택 정렬(Selection Sort)에 대해서

by bantomak 2024. 1. 17.
반응형

선택 정렬

최소값을 선택해서 맨 앞의 값과 교체한다. 그래서 선택 정렬이다!

 

  • 주어진 리스트 중에 최소값을 찾는다.
  • 그 값을 맨 앞에 위치한 값과 교체한다.
  • 맨 처음 위치를 뺸 나머지 리스트를 같은 방법으로 교체한다.
  • 정렬 완료

시간 복잡도와 공간 복잡도

  • 최고 시간 복잡도: O(n^2)
  • 평균 시간 복잡도: O(n^2)
  • 최악 시간 복잡도: O(n^2)
  • 최고 공간 복잡도: O(1)

 

수도 코드

Initialize n = Length of Array
SelectionSort (Array, n)
{
    for i = 0 to n-2
    {
        i_min = i
        for j = i+1 to n-1
        {
            if Array[j] < Array[i_min]
                i_min = j
        }
        Swap(Array[j], Array[i_min])
    }
}

 

예제 코드

static void Main(string[] args)
{
    var array = new int[] { 3, 7, 2, 5, 1, 4 };

    Console.WriteLine($"{string.Join(" ", array)} << 시작");

    SelectionSort(array);
}

public static int[] SelectionSort(int[] array)
{
    int count = 0;
    var min = array.First();

    for (int i = 0; i < array.Length; i++)
    {
        for (int j = count; j < array.Length; j++)
        {
            if (array[j] < min)
            {
                min = array[j];
            }
        }

        var index = Array.IndexOf(array, min);

        var temp = array[count];
        array[count] = array[index];
        array[index] = temp;

        count++;
        min = array.Last();

        Console.WriteLine(string.Join(" ", array));
    }

    return array;
}

 

개선된 예제 코드

i와 동일한 역할을 하는 count 제거 >> i로 대체

min값이 아닌 minIndex로 변경

 

static void Main(string[] args)
{
    var array = new int[] { 3, 7, 2, 5, 1, 4 };

    Console.WriteLine($"{string.Join(" ", array)} << 시작");

    SelectionSort(array);
}

public static int[] SelectionSort(int[] array)
{
    for (int i = 0; i < array.Length; i++)
    {
        var minIndex = i;
        for (int j = i + 1; j < array.Length; j++)
        {
            if (array[j] < array[minIndex])
            {
                minIndex = j;
            }
        }

        var temp = array[minIndex];
        array[minIndex] = array[i];
        array[i] = temp;

        Console.WriteLine(string.Join(" ", array));
    }

    return array;
}

 

 

 

버블 정렬(Bubble Sort)
선택 정렬(Selection Sort)

 

함께 보면 좋은 글

 

C# 버블 정렬(Bubble Sort)에 대해서

버블 정렬(Bubble Sort) 누구나 한 번쯤은 들어봤을 버블 정렬(혹은 거품 정렬이라고도 불린다)에 대해서 알아보려고 한다. 버블 정렬은 구현이 직관적이고 간단하다. 아래의 과정을 배열의 길이 - 1

jettstream.tistory.com

 

C# 삽입 정렬(Insertion Sort)에 대해서

삽입 정렬 삽입 정렬에 대해서 딱 들었을 때 드는 생각은 별도의 원소를 삽입하는 건가라는 생각이었다. 하지만 걱정하지 말자 추가적으로 원소를 삽입하거나 하지 않는다. 마치 손에 든 카드를

jettstream.tistory.com

 

참고 사이트

 

Selection Sort - Fully Understood

An in-place sorting algorithm that finds smallest element in each cycle and puts it in appropriate position (i.e. at beginning) in list.

fullyunderstood.com

댓글