2010-05-27 3 views
-1
#include<stdlib.h> 
#include<stdio.h> 
#include<string.h> 
//This program is a sorting application that reads a sequence of numbers 
//from a file and prints them on the screen . The reading from the file here, 
//is a call back function . 

typedef int (*CompFunc)(const char* , const char*); 
typedef int (*ReadCheck)(char nullcheck); 
char array[100]; 
//Let this function be done in the library itself . It doesn't care as to 
//where the compare function and how is it implemented . Meaning suppose 
//the function wants to do sort in ascending order or in descending order 
//then the changes have to be done by the client code in the "COMPARE" function 
//who will be implementing the lib code . 
void ReadFile(FILE *fp,ReadCheck rc) 
{ 
    char a; 
    char d[100]; 
    int count = 0,count1=0; 
    a=fgetc(fp); 
    while(1 != (*rc)(a)) 
    { if(a=='\0') 
     { 
     //d[count1]='\0'; 
     strcpy(&array[count],d); 
     count=count+1; 
     } 
     else 
     { 

     d[count1]=a; 
     count1=count1+1; 

     } 
    } 

} 
void Bubblesort(char* array , int size , int elem_size , CompFunc cf) 
{ int i,j; 
    int *temp; 
    for(i=0;i < size ;i++) 
    { 
     for (j=0;j < size -1 ; j++) 
     { 
      // make the callback to the comparision function 
      if(1 == (*cf)(array+j*elem_size,array+ (j+1)*elem_size)) 
       { 
        //interchanging of elements 
        temp = malloc(sizeof(int *) * elem_size); 
        memcpy(temp , array+j*elem_size,elem_size); 
        memcpy(array+j*elem_size,array+(j+1)*elem_size,elem_size); 
        memcpy(array + (j+1)*elem_size , temp , elem_size); 
        free(temp); 
       } 
     } 
    } 
} 



//Let these functions be done at the client side 

int Compare(const char* el1 , const char* el2) 
    { 
     int element1 = *(int*)el1; 
     int element2 = *(int*)el2; 

     if(element1 < element2) 
      return -1; 
     if(element1 > element2) 
      return 1 ; 
     return 0; 
    } 

int ReadChecked(char nullcheck) 
    { 
     if (nullcheck=='\n') 
      return 1; 
     else 
      return 0; 
    } 
int main() 
{ 
    FILE *fp1; 
    int k; 
    fp1=fopen("readdata.txt","r"); 
    ReadFile(fp1,&ReadChecked); 
    Bubblesort((char*)array,5,sizeof(array[0]),&Compare); 
    printf("after sorting \n"); 
    for (k=0;k<5;k++) 
    printf("%d",array[k]); 

return 0; 
} 
+2

무엇이 문제입니까? –

+0

디버거를 사용하여 멈추는 부분을 보았습니까? – Cascabel

답변

1

아마도 프로그램이 실행되는 데 약간의 시간이 걸릴 것입니다.

다음과 같은 문제가 발생할 수 있습니다. fgetc에서 EOF (-1)를 반환하면 어떻게됩니까?

+0

아니 그것을 실행하지 .. 그것을 끝내지 .. 아마 무한 루프 – Hick

+0

+1 : O (n^2) 정렬 엿 같은! –

+0

저는 이것이 매우 시간이 중요하지 않다고 생각합니다 ... 코드를 살펴보면, 정렬하는 요소가 5 개 밖에없는 것 같습니다. – schnaader

1

while(1 != (*rc)(a))

관련 문제