CAFE

BIT 2011-주간

Sort Practice 6 영어사전 만들기(강사님 질문포함)

작성자최봉준|작성시간11.07.21|조회수111 목록 댓글 0

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct QR{
 char Word[30];
 char mean[30];
}Record;

void Swap(Record *A,Record *B){
 Record temp=*A;
 *A=*B;
 *B=temp;
}
int Comp(Record a,Record b){
 return strcmp(a.Word,b.Word);
}

int Partition(Record *AA, int Left, int Right){
 Record Pivot;
 int Low,High;
 Low=Left;
 High=Right;
 Pivot=AA[Left];

 do{
  do
  Low++;
  while(Comp(AA[Low],Pivot)<0);
  do
  High--;
  while(Comp(AA[High],Pivot)>0);
  if(Low<High)
   Swap(&AA[Low],&AA[High]);
 }while(Low<High);
 Swap(&AA[Left],&AA[Right]);
 return High;
}

void QuickSort(Record *AA, int Left, int Right){
 if(Left<Right)
 {
  int Index=Partition(AA,Left,Right);
  QuickSort(AA,Left,Index-1);
  QuickSort(AA,Index+1,Right);
 }
}

void main()
{
 Record List[5];
 int i;

 for (i=0;i<5;i++)
 {
  printf("사전에 %d번째 등록할 영어단어를 넣으세요 : ",i+1);
  scanf("%s",List[i].Word);
  printf("방금 등록한 영어단어의 뜻을 한글로 넣으세요 : ");
  scanf("%s",List[i].mean);
 }
 printf("\n\n영어단어 순서로 퀵정렬 합니다.\n");
 QuickSort(List,0,4);
 for(i=0;i<5;i++)
  printf("%20s %20s\n",List[i].Word,List[i].mean);
 printf("\n");
}

 

정상적으로 다 한거 같은데 ㅡㅡ 정렬 안되네요

 

while(Comp(AA[Low],Pivot)<0);

while(Comp(AA[High],Pivot)>0);

위에 strcmp로 비교할때 왼쪽 스트링값이 작으면 음수가 리턴되고

 

크면 양수가 리턴되서 틀릴 만한 곳은 그곳뿐인거같은데.. 그것도 아닌거 같고요

 

다른곳 틀린곳 지적좀 해주시면 감사하겠습니다.

 

교제 에서는 High=Right+1;

 

되있는것을 High=Right; 한이유는

 

아래 퀵소트 함수에서 레프트값 0 라이트값 4를 줘서 그렇게 했습니다.

 

또 문제 발견했는데.. 될때도있고 안될때도있네요 정렬이..

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼