/*
CCL-
2014.05.20
by_jacob(apodis91@naver.com/apodis91@ks.ac.kr)
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*
텍스트파일(.txt)의 이름과 Max_Size를 변경해주어야 합니다.
*/
#define Max_Size 150000 // 배열 사이즈 정의
#define SWAP( x, y, t ) ((t) = (x), (x) = (y), (y) = (t)) // 숫자 교환 전처리
//시간함수관련
time_t t1, t2;
void Quick_sort( int*, int, int ); // 정렬 함수
int Partition ( int*, int, int ); // 분할 함수
int main( )
{
FILE* file = fopen("data150000.txt","r");
//시간함수관련
time(&t1);
int k=0; //배열
int quick[ Max_Size+1 ] = { 0, }; // 정수형 배열 선언
int i, j, size = sizeof( quick ) / 4; // 배열 갯수 선언
while(!feof(file))
fscanf(file, "%d", &quick[k++]);
fputs( "▶ Before : ", stdout );
for( i = 0; i < Max_Size; i++ ) printf(" %d ", quick[ i ] );// 정렬 전 출력
printf("\n");
Quick_sort( quick, 0, size - 1 ); // 정렬 함수 호출
fputs( "▶ After : ", stdout );
for( i = 0; i < Max_Size; i++ ) printf(" %d ", quick[ i ] );// 정렬 후 출력
printf("\n");
//시간함수관련
time(&t2);
printf("총 %f초가 걸렸습니다.", difftime(t2,t1));
return 0; // 정상 종료
}
void Quick_sort( int* quick, int begin, int end ) // 정렬 함수
{
int i = 0;
if( begin < end ) // 배열의 크기만큼 함수 호출
{
i = Partition( quick, begin, end ); // L 값 i에 저장
Quick_sort( quick, begin, i - 1 ); // L 값 재귀 호출
Quick_sort( quick, i + 1, end ); // R 값 재귀 호출
}
}
int Partition( int* quick, int begin, int end ) // 분할 함수
{
int i = 0, j = 0, pivot = 0, L = 0, R = 0, temp = 0; // 변수 선언
pivot = ( begin + end ) / 2; // 원소의 가운데 값을 pivot에 대입
L = begin; // L은 첫 인덱스
R = end; // R은 마지막 인덱스
while( L < R ) // 배열의 갯수만큼 반복
{
while( quick[ L ] < quick[ pivot ] && ( L < R ) ) L++;// L이 pivot보다 작고 R보다 작을때까지 L 증가
while( quick[ R ] >= quick[ pivot ] && ( L < R ) ) R--;// R이 pivot보다 크거나 같고 L보다 클때까지 R증가
if( L < R ) SWAP( quick[ L ], quick[ R ], temp );// R이 L보다 크면 원소 교환
}
SWAP( quick[ pivot ], quick[ R ], temp ); // 그렇지 않으면 R과 pivot 교환
return L; // L 반환
}
'C.E > File processing' 카테고리의 다른 글
B트리 (0) | 2014.06.05 |
---|---|
C++ 합병정렬 소스(merge sort in have data) (0) | 2014.05.20 |
C++ 정렬에 쓸 데이터 생성 (0) | 2014.05.20 |
C++ 합병정렬 소스(merge sort) (1) | 2014.05.20 |
C++ 퀵정렬 소스(quick sort) (0) | 2014.05.20 |