Algorithm

2020.09.02 - 삽입 정렬(insertion Sort), 퀵 정렬(Quick Sort)

J_Bin 2020. 9. 2. 18:52

* 삽입 정렬 

 : 각 숫자를 적절한 위치에 삽입하는 방식이다. 다른 정렬 방식들은 무조건 위치를 바꾸지만 삽입 정렬은 '필요할 때만' 위치를 바꾸게 된다.

 

O(n^2) 이지만 선택, 버블 정렬에 비해 속도가 빠르다.

삽입 정렬은 기본적으로 왼쪽에 값들이 '정렬되어 있다는 가정'을 한다. 특정한 경우에 따라 매우 빠를 수도 있다. 

왼쪽의 숫자와 비교하여 더 작은 값을 앞으로 배치한다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Insertaion_Sort
{
    class Program
    {
        static void Main(string[] args)
        {
            int temp;
            int j;
            int[] array = new int[] { 10, 3, 4, 1, 2, 6, 8, 7, 9, 5 };

            for (int i = 0; i < array.Length; i++)
            {
                j = i;
                while (array[j] > array[j+1])
                {
                    temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    j--;
                }
            }

            foreach (var item in array)
            {
                Console.WriteLine(item);
            }
        }
    }
}

 

- 결과

배열이 거의 정렬된 상태라면 삽입 정렬이 가장 빠를 수 있다.

 

 

* 퀵 정렬(Quick Sort)

: 가장 빠른 정렬 알고리즘이다. 대표적인 '분할 정복' 알고리즘이다.

평균 속도가 O(N * logN)이다. (logN은 거의 상수라고 볼 수 있다.)

 

> 특정한 값을 기준으로 큰 숫자와 작은 숫자를 서로 교환한 뒤에 배열을 반으로 나눈다.

퀵 정렬에는 '기준 값'이 존재한다. 이를 피벗(Pivot)이라고 한다. 보통 첫번째 원소의 value를 피벗으로 설정한다.

 

 : 각 숫자를 적절한 위치에 삽입하는 방식이다. 다른 정렬 방식들은 무조건 위치를 바꾸지만 삽입 정렬은 '필요할 때만' 위치를 바꾸게 된다.

 

 

 

 

 

 

 

 

 

 

'Algorithm' 카테고리의 다른 글

다시 풀어볼 문제들  (1) 2023.05.18
2020.09.03 - Tree (binary)  (0) 2020.09.03
2020.09.02 - 선택 정렬(Selection Sort) / 버블 정렬(Bubble Sort)  (0) 2020.09.02