이산수학 레폿으로 했던 퀵 소트!
약간 진보한 버젼으로 , 소트에 걸린시간도 표시해준다 ㅋ_ㅋ
테스트를 해보니 , 자료 80만개를 정렬하는데는 약 4초가 걸렸다;;
으헉 느리다!!! ㅠㅠ 알고리즘 수정 ㄱㄱ싱.
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define SIZE 8
typedef struct timeval TIME;
void QuickSort ( int *pData , int nLow , int nHigh , int nPivot );
void Swap ( int *a , int *b );
void Display ( int *pData );
int Separate ( int *pData , int nLow , int nHigh , int nPivot );
double GetProcTime ( TIME start , TIME end );
int main(void)
{
int i;
int aData[SIZE];
double fTime;
TIME timestart , timeend;
srand ( time(NULL) );
for ( i = 0 ; i < SIZE ; i++ )
{
aData[i] = rand() % 100;
}
printf ( "Original data : " );
Display ( aData );
printf ( "\n" );
gettimeofday ( ×tart , NULL );
QuickSort ( aData , 0 , SIZE , 0 );
gettimeofday ( &timeend , NULL );
printf ( "\n" );
printf ( "After Quick-Sort : " );
Display ( aData );
fTime = GetProcTime ( timestart , timeend );
printf ( "Elapsed Time : %lf Sec.\n" , fTime / 1000000 );
return 0;
}
void QuickSort ( int *pData , int nLow , int nHigh , int nPivot )
{
printf ( "Sorting.. -> Pivot [%2d] : " , pData[nPivot] );
Display ( pData );
if ( nHigh > nLow )
{
nPivot = Separate ( pData , nLow , nHigh , nPivot );
QuickSort ( pData , nLow , nPivot-1 , nPivot );
QuickSort ( pData , nPivot+1 , nHigh , nPivot );
}
}
int Separate ( int *pData , int nLow , int nHigh , int nPivot )
{
int i, j;
int nItem;
nItem = pData[nLow];
j = nLow;
for( i = nLow + 1 ; i <= nHigh ; i++ )
{
if ( pData[i] < nItem )
{
j++;
Swap( &pData[i] , &pData[j] );
}
}
nPivot = j;
Swap ( &pData[nLow] , &pData[nPivot] );
return nPivot;
}
void Swap ( int *nA , int *nB )
{
int nTemp;
nTemp = *nA;
*nA = *nB;
*nB = nTemp;
}
void Display ( int *pData )
{
int i;
for ( i = 0 ; i <= SIZE ; i++ )
{
printf ( "%2d " , pData[i] );
}
printf ( "\n" );
}
double GetProcTime ( TIME start , TIME end )
{
double fRes = 0;
fRes = ( end.tv_sec/10000 + end.tv_usec ) - ( start.tv_sec/10000 + start.tv_usec );
return fRes;
}

