반응형

개발자라면!! 종종 손코딩 면접을 보는 경우가 있습니다. 

가장 대표적으로 버블소트와 퀵소트가 있습니다. Swap 함수는 구현하지 않았습니다.^^

 

1. 버블소트

버블 소트는 인접한 두개의 값을 비교하여 오른쪽 값이 왼쪽 값보다 작다면 교환하는 방법입니다.

void bubleSort(ref int[] array)
{
    for(int i=0; i < array.Length; i++)
    {
        //(i+1) 을 빼주는 이유는 한번의 loop(i 기준) 가 완료될때 마다 가장 오른쪽 (가장 큰 값)은 정렬이 되기 때문입니다.
        for(int j = 0; j < (array.Length - (i+1)); j++)
        {
            if(array[j] > array[j+1])
            {
                Swap(ref array, j, j+1);
            }
        }
    }
}

 

2. 퀵소트

퀵소트는 임의의 Pivot (비교 기준) 을 정하고 데이터의 가장 왼쪽과 오른쪽부터 비교하면서 왼쪽값이 Pivot 값 보다 크고 오른쪽 값이 Pivot 보다 작다면 그 두 값을 교환하는 방법입니다.

교환을 한 후 Pivot 값을 중심으로 좌측, 그리고 우측을 재귀로 호출하면 됩니다.

wikipedia 에 잘 표현한 그림이 있어  첨부하였습니다.

(출처 : 위키페디아 https://ko.wikipedia.org/wiki/%ED%80%B5_%EC%A0%95%EB%A0%AC )

void quickSort(ref int[] array, int left, int right)
{
    int l_hold, r_hold, pivot;
    l_hold = left;
    r_hold = right;


    // 기준 값은 가운데 값으로 설정합니다.
    pivot = array[(left + right) / 2];


    while(left < right)
    {
        while (array[left] < pivot) left++;
        while (array[right] > pivot) right--;


        if(left <= right)
        {
            Swap(ref array, left, right);
            left++;
            right--;


            this.printArray(array);
        }
    }


    if (l_hold < right) quickSort(ref array, l_hold, right);
    if (r_hold > left) quickSort(ref array, left, r_hold);
}

 

이상 대표적인 두가지 정렬 방법인 버블소트와 퀵소트에 대하여 소스를 정리하였습니다.

물론 이 방법이외에도 구현하는 방법은 많이 있으니 참고 하시면 좋을 것 같습니다.

 

반응형

'IT > C#' 카테고리의 다른 글

숫자 (금액) 콤마 표시하기  (0) 2018.07.03
화면잠금 방지 프로그램  (0) 2018.05.18
Excel 컬럼명으로 Index 조회 (참고 OpenXML)  (0) 2018.03.14
폴더 생성 및 권한관리  (0) 2018.02.07
IP 주소 가져오기  (0) 2018.02.05

+ Recent posts