#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를 줘서 그렇게 했습니다.
또 문제 발견했는데.. 될때도있고 안될때도있네요 정렬이..