제 목 자료구조 QuickSort가 출력이 안됩니다.
작성자 우대식 등록날짜 2022-02-03 21:16:03 / 조회수 : 129
강좌명 [패키지] 게임 프로그래밍 취업 완성 패키지
첨부파일
  • 자료구조 퀵정렬 부분을 코딩하는데 출력부분이 나오지가 않습니다.

    예제로 올라온 파일을 받아서 실행할때는 출력이 되는데 비교해봐도 문제가 되는 부분을 알수가 없어서 질문드립니다.

     

    #include
    #include
    #include
    #include"Time.h"

    void ReadData(int* datas)
    {
        FILE* file;
        fopen_s(&file, "RandData.txt","r");
        {
            for (UINT i = 0; i < USHRT_MAX; i++)
            {
                fscanf(file, "%d", &datas[i]);
            }
        }
        fclose(file);
    }

    void Swap(int* left, int* right)
    {
        int* temp = left;
        left = right;
        right = temp;
    }

    int Partition(int* datas, int left, int right)
    {
        int first = left;
        int pivot = datas[first];

        left++;
        while (left <= right)
        {
            while (datas[left] <= pivot && left < right)
                left++;
            while (datas[right] > pivot && left <= right)
                right--; 
            if (left < right)
                Swap(&datas[left], &datas[right]);
            else
                break;   
        }

        Swap(&datas[first], &datas[right]);

        return right;

    void Qsort(int* datas, int left, int right)
    {
        if (left < right)
        {
            int index = Partition(datas, left, right);
            
            Qsort(datas, left, index - 1);
            Qsort(datas, index + 1, right);
        }
    }

    int Compare(const void* val1, const void* val2)
    {
        int* left = (int*)val1;
        int* right = (int*)val2;


        if (*left > *right)
            return 1;
        else if (*left < *right)
            return -1;

        return 0;
    }

    bool Compare2(const int& val1, const int& val2)
    {
        return val1 }

    void main()
    {
        //Qsort
        {    
         int datas[USHRT_MAX];
         ReadData(datas);

         Timer timer;
         timer.Start();
         {
            Qsort(datas, 0, USHRT_MAX - 1);
         }
         printf("소요 시간 : %f ", timer.End());

         for (int i = 0; i < 50; i++)
            printf("%d", datas[i]);
        }

        printf(" ");

        //qsort - C style
        {
            int datas[USHRT_MAX];
            ReadData(datas);

            Timer timer;
            timer.Start();
            {
                qsort(datas,sizeof(datas)/sizeof(int), sizeof(int), Compare);
            }
            printf("소요 시간 : %f ", timer.End());

            for (int i = 0; i < 50; i++)
                printf("%d", datas[i]);
        }

        printf(" ");


        //qsort - C++ style
        {
            int datas[USHRT_MAX];
            ReadData(datas);

            Timer timer;
            timer.Start();
            {
                std::sort(datas,datas+USHRT_MAX,Compare2);
            }
            printf("소요 시간 : %f ", timer.End());

            for (int i = 0; i < 50; i++)
                printf("%d", datas[i]);
        }
    }

  • 작성자 : 게임클래스 / 등록날짜 : 2022-02-08 13:11:43
  • 안녕하세요 게임클래스 입니다.

    문의 주신 내용의 코드를 확인해 본 결과

    샘플로 올려드린 코드와 다른 부분이 많이 발견됩니다.

    대표적으로는 

    Swap 함수 부분인데요.

    올려주신 소스에는

    int* temp = left; 로 되어있지만

    샘플 소스에는

    int temp = *a(left); 로 포인터 위치가 다릅니다.

    그 아래부분도 

    올려주신 소스는

    left = right;
    right = temp;

    샘플 소스는

    *a = *b;
    *b = temp;

    값을 대입하는것과 주소값을 대입하는것은 차이가 있겠죠??

     

    이런식으로 코드상 다른부분이 여러부분이 발견됩니다.

    디테일하게 확인해 보시면 도움이 될것 같구요.

    비교해 보실때 

    winmerge라는 프리웨어 프로그램을 추천 드립니다.

    2개의 문서를 띄워놓고 비교할 수 있는 프로그램입니다.

    해서 비교해 놓고 확인해 보시면 될것 같습니다.

    감사합니다.