• 파일시티 이벤트
  • LF몰 이벤트
  • 캠퍼스북
  • 서울좀비 이벤트
  • 탑툰 이벤트
  • 닥터피엘 이벤트
  • 아이템베이 이벤트
  • 아이템매니아 이벤트

다단계합병 소스

*인*
최초 등록일
2004.11.21
최종 저작일
2004.11
파일확장자 C언어
가격 무료 할인쿠폰받기
다운로드

소개글

이번에 자료처리 과목을 들으면서 만들어본 3원 다단계 합병정렬 소스 입니다.

컴파일 실행환경

비쥬얼 C++, 리눅스 레드햇 9.0, 유닉스 sun5.0에서 다 돌려 봐도 됩니다.

실행을 시키면 별로 나타나는것은 없고 7개 파일이 만들어 집니다.

input.txt - 난수를 1000개 생성하여 저장
intermed.txt - 중간화일입니다. 런이 난수가 어떻게 생성되었는지, 런이 어떻게 분배 되었는지, 각 단계마다 런이 어떻게 합병 되었는지를 보여 줍니다.
intermed00~03 - 합병되는 파일들입니다.
output.txt - 최종 결과물을 저장합니다.
temp.txt - 파일을 다시 쓰기위해 잠시 담아 두는 임시 파일 입니다.

질문 필요하시면 kukuta@dreamwiz.com으로 메일 주세요

본문내용

int TripleMerge(char* dest, char* file0, char* file1, char* file2) {
FILE *fpd, *temp, **fp; //fpd - 쓰기 파일, *temp - 임시 파일 포인터 **fp - 읽기 전용 파일 포인터들
char *filename[3]; //파일이름을 담기위한 변수
int runcount[DEGREE]; //각 파일의 런의 총 갯수를 담기 위한 변수
int totrunsz=0, runsz[DEGREE]; // totrunsz 같은 인덱스의 런이 담고 있는 총 레코드의 수
//runsz 각 런이 가지고 있는 레코드수
int buf[DEGREE];
int frozen[DEGREE]; //FindUnfrozenSmallestIndex함수를 쓰기 위한 변수
//선택 된것을 동결시켜 다시 선택 되지 못하도록 한다.
int i, j, k, index; //index 가장 적은 런의 갯수를 가지고 있는 파일 인덱스 건드리면 죽는다

filename[0]=file0; //파일 이름 할당
filename[1]=file1;
filename[2]=file2;

fp=(FILE**)malloc(sizeof(FILE*)*(DEGREE+1));
fpd=fopen(dest, "w"); //파일의 개방
fp[0]=fopen(filename[0], "r+");
fp[1]=fopen(filename[1], "r+");
fp[2]=fopen(filename[2], "r+");

memset(runcount, 0, sizeof(runcount));
memset(runsz, 0, sizeof(runsz));
memset(frozen, 0, sizeof(frozen));

for(i=0; i<DEGREE; i++) //읽기용 파일에서 파일이 하나라도
if(feof(fp[i])) //비었다면
return -1; //에러..

//한 파일안에 들어 있는 런의 총갯수를 읽는다.
for(i=0; i<DEGREE; i++) {
fscanf(fp[i], " %d", &runcount[i]);
}
index=FindSmallestIndex(runcount, DEGREE); //가장 작은 런 갯수를 가진 파일을 찾는다.
fprintf(fpd, " %d", runcount[index]); //쓰기 파일에 런의 갯수를 쓴다.

for(i=0; i<runcount[index]; i++) { //최소 런의 갯수 만큼 반복
for(j=0; j<DEGREE; j++) {
fscanf(fp[j], " %d", &runsz[j]); //런 하나의 레코드 갯수를 익는다.
totrunsz+=runsz[j];
fscanf(fp[j], " %d", &buf[j]); //최초 런의 최초 레코드 값을 읽는다.
runsz[j]--;
}
fprintf(fpd," %d", totrunsz); //런 앞에 최대 런수 쓰기

for(j=0; j<totrunsz; j++) {
k=FindUnfrozenSmallestIndex(buf, DEGREE, frozen); //가장 작은런 찾아서
fprintf(fpd, " %d", buf[k]); //파일에 쓰기
if(runsz[k]>0) { //런사이즈가 0 초과면
fscanf(fp[k], " %d", &buf[k]); //또 읽어 오기
runsz[k]--;
frozen[k]=0;
}
}
totrunsz=0;
memset(frozen, 0, sizeof(frozen));
memset(runsz, 0, sizeof(runsz));
} //최소 런 갯수 쓰기 파일에 쓰기 끝.

//빈파일 만들기 시작

for(i=0; i<DEGREE; i++) {
temp=fopen("temp.txt", "w+");
if(!feof(fp[i])) {
while(!feof(fp[i])) {
fscanf(fp[i]," %d", &buf[i]);
fprintf(temp," %d", buf[i]);
}
fclos<font color=aaaaff>..</font>

참고 자료

없음

자료후기(4)

*인*
판매자 유형Bronze개인

주의사항

저작권 자료의 정보 및 내용의 진실성에 대하여 해피캠퍼스는 보증하지 않으며, 해당 정보 및 게시물 저작권과 기타 법적 책임은 자료 등록자에게 있습니다.
자료 및 게시물 내용의 불법적 이용, 무단 전재∙배포는 금지되어 있습니다.
저작권침해, 명예훼손 등 분쟁 요소 발견 시 고객센터의 저작권침해 신고센터를 이용해 주시기 바랍니다.
환불정책

해피캠퍼스는 구매자와 판매자 모두가 만족하는 서비스가 되도록 노력하고 있으며, 아래의 4가지 자료환불 조건을 꼭 확인해주시기 바랍니다.

파일오류 중복자료 저작권 없음 설명과 실제 내용 불일치
파일의 다운로드가 제대로 되지 않거나 파일형식에 맞는 프로그램으로 정상 작동하지 않는 경우 다른 자료와 70% 이상 내용이 일치하는 경우 (중복임을 확인할 수 있는 근거 필요함) 인터넷의 다른 사이트, 연구기관, 학교, 서적 등의 자료를 도용한 경우 자료의 설명과 실제 자료의 내용이 일치하지 않는 경우
최근 본 자료더보기
탑툰 이벤트
다단계합병 소스
  • 레이어 팝업
  • 레이어 팝업
  • 레이어 팝업
  • 레이어 팝업
  • 레이어 팝업