(構造関係)クイックソート
課題のpascal翻訳も30分で完了し、クイックソート完成☆
瞑想に耽りながら考えたので関数を参考に・・・
コメント少なくてごめんなさい。決して天才肌ではないので
//quicksort.c
//date 2006 7/23
//author u5h
//
//Makefile
//CFLAGS= -g
//:quicksort
//
//cations! :This program has to use "phone.txt"file
//please make it.Following its prototype
// "phone.txt"
// suzuki 1001
// yamada 1003
// ・・・・・・ ・・・・
#include
#include
#include
struct record{
char name[15];
int num;
};
struct record A[60];
void quicksort(int,int);
int main(void)
{
FILE *fp;
char name[15];
int num,i=0;
if( (fp=fopen("phone.txt","r"))==NULL)
{
printf("file error.\n");
exit(1);
}
while( fscanf(fp,"%s %d",name,&num)!=EOF)
{
strcpy(A[i].name,name);
A[i].num=num;
i++;
}
fclose(fp);
for(i=0;i<6;i++)
printf("%s %d\n",A[i].name,A[i].num);
printf("\n");
quicksort(0,5);
for(i=0;i<6;i++)
printf("%s %d\n",A[i].name,A[i].num);
printf("\n");
return 0;
}
void quicksort(int first,int last)
{
char key[15];
int i,j,x;
struct record t;
i=first;
j=last;
x=(first+last)/2;
strcpy(key,A[x].name);
printf("\n");
do{
while(strcmp(A[i].name,key)<0)
i++;
while(strcmp(A[j].name,key)>0)
j--;
if(i<=j)
{
t=A[i]; /*sorting ij*/
A[i]=A[j];
A[j]=t;
i++;
j--;
}
}while(!(i>j));
if(first