자료구조 퀵정렬 부분을 코딩하는데 출력부분이 나오지가 않습니다.
예제로 올라온 파일을 받아서 실행할때는 출력이 되는데 비교해봐도 문제가 되는 부분을 알수가 없어서 질문드립니다.
#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]);
}
}
안녕하세요 게임클래스 입니다.
문의 주신 내용의 코드를 확인해 본 결과
샘플로 올려드린 코드와 다른 부분이 많이 발견됩니다.
대표적으로는
Swap 함수 부분인데요.
올려주신 소스에는
int* temp = left; 로 되어있지만
샘플 소스에는
int temp = *a(left); 로 포인터 위치가 다릅니다.
그 아래부분도
올려주신 소스는
left = right;
right = temp;
샘플 소스는
*a = *b;
*b = temp;
값을 대입하는것과 주소값을 대입하는것은 차이가 있겠죠??
이런식으로 코드상 다른부분이 여러부분이 발견됩니다.
디테일하게 확인해 보시면 도움이 될것 같구요.
비교해 보실때
winmerge라는 프리웨어 프로그램을 추천 드립니다.
2개의 문서를 띄워놓고 비교할 수 있는 프로그램입니다.
해서 비교해 놓고 확인해 보시면 될것 같습니다.
감사합니다.