상세 컨텐츠

본문 제목

[C] 퀵 정렬

C++ 문법

by simstealer 2023. 1. 26. 12:25

본문

#include <stdio.h>
#include <string.h>

void Swap(int* A, int* B)
{
    int Temp = *A;
    *A = *B;
    *B = Temp;
}

int Partition(int DataSet[], int Left, int Right)
{
    int First = Left;
    int Pivot = DataSet[First];

    ++Left;

    while (Left <= Right)
    {
        while (DataSet[Left] <= Pivot && Left < Right)
        {
            ++Left;
        }
        while (DataSet[Right] >= Pivot && Left <= Right)
        {
            --Right;
        }
        if (Left < Right)
            Swap(&DataSet[Left], &DataSet[Right]);
        else
            break;
    }

    Swap(&DataSet[First], &DataSet[Right]);
    return Right;
}

void QuickSort(int DataSet[], int Left, int Right)
{
    // Left가 Right 보다 크면 동작하지 않아도 된다.
    if (Left < Right)
    {
        int Index = Partition(DataSet, Left, Right);
        QuickSort(DataSet, Left, Index - 1);
        QuickSort(DataSet, Index + 1, Right);
    }
}

int main()
{
    int DataSet[] = { 6, 4, 2, 3, 1, 5 };
    int Length = sizeof(DataSet) / sizeof(DataSet[0]);
    int i = 0;

    QuickSort(DataSet, 0, Length - 1);

    for (i = 0; i < Length; i++)
    {
        printf("%d", DataSet[i]);
    }

    printf("\n");
    return 0;
}

'C++ 문법' 카테고리의 다른 글

[C] 카프리카 수 구하기  (0) 2023.01.27
[C] 퀵 정렬(qsort)  (0) 2023.01.26
[C] 삽입 정렬  (0) 2023.01.25
[C] 버블 소트  (0) 2023.01.25
[C++] inline 함수  (0) 2023.01.04

관련글 더보기

댓글 영역