All pastes #770022 Raw Edit

Something

public text v1 · immutable
·published 2007-11-11 20:57 UTC
rendered paste body
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <malloc.h>

#define filename "pinakas.txt"

 int menu(void);
 int DimiourgiaPinaka (int *pinakas);
 void EmfanisiPinaka(int *pinakas, int length);
 void saveData(int *pinakas, int length);
 void loadData(int *pinakas);
 int bubblesort (int *pin,int megethos);
 int insertionSort(int *pin,int megethos);
 int quickSort(int a[], int left, int right,int diakoptis );
 int euresi (int megethos);

//---------------------------------------------------------------------------------------------------------------------//
                                               //SYNARTISI MAIN()// 
int main(void)
{
    int choice,*pinakas,megethos,memory,tyxaio_stoix,temp1,temp2,temp3;
    pinakas=(int *)malloc(1*sizeof(int));
    if(pinakas==NULL) printf("Den yparxei arketi mnini gia dimiourgia enos pinaka \n");
    
     do{
    choice=menu();
		switch(choice){
	   case 1:megethos=DimiourgiaPinaka(pinakas); break;
	   case 2:saveData(pinakas,megethos);getch(); break;
	   case 3:loadData(pinakas);printf("megethos:%d\n",sizeof(pinakas)); break;
	   case 4:EmfanisiPinaka(pinakas,megethos); break;
	   case 5:temp1=bubblesort(pinakas,megethos);printf("Eginan %d antimetatheseis! \n",temp1); break;
	   case 6:temp2=insertionSort(pinakas,megethos);printf("Eginan %d antimetatheseis!\n",temp2);break;
	   case 7:temp3=quickSort(pinakas,0,megethos-1,1); printf("Eginan %d antimetatheseis!\n",temp3);break;
	   case 8:temp3=quickSort(pinakas,0,megethos-1,2);printf("Eginan %d antimetatheseis!\n",temp3); break;
	   case 9:temp3=quickSort(pinakas,0,megethos-1,3);printf("Eginan %d antimetatheseis! \n",temp3);break;
	   case 0:exit(0);
	   }
	 }while(1);
         
    
    free(pinakas);
    
    } 
      
 //---------------------------------------------------------------------------------------------------------------------//    
    
    int menu(void){
  int choice;
  do{
    printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* \n");  
	printf("1.Dimiourgia pinaka \n");
	printf("2.Apothikeusi pinaka se arxeio \n");
	printf("3.Anaktisi pinaka apo arxeio \n");
	printf("4.Emfanisi pinaka \n");
	printf("5.Bubblesort \n");
	printf("6.Insertion Sort \n");
	printf("7.Quick Sort 1 \n");
	printf("8.Quick Sort 2 \n");
	printf("9.Quick Sort 3 \n");
    printf("0.Eksodos apo tin efarmogi \n");
    printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* \n");
	printf("EPILOGH : ");
	scanf("%d",&choice);         
	}while (choice!=0&&choice!=1 && choice!=2 && choice!=3 && choice!=4 && choice!=5
			   &&choice!=6 && choice!=7 && choice!=8 && choice!=9);
	return choice;
}
     
//---------------------------------------------------------------------------------------------------------------------//      
     
     int DimiourgiaPinaka (int *pinakas)
     {
         int megethos,epilogi,key=0,i;
         
     printf("Dwste to epithymito megethos tou pinaka :\n");
     scanf("%d" , &megethos);
   
     
     realloc(pinakas,megethos * sizeof(int));
     if(pinakas==NULL) printf("Den yparxei arketi mnini gia dimiourgia enos pinaka \n");
     
     
     
     while(key==0) 
     {
        printf("Patiste 1 gia Ataksinomito pinaka h 2 gia Sxedon Taksinomimeno pinaka : \n");
        scanf("%d",&epilogi);
     
     if(epilogi==1) 
           {
              printf("EPILOGH 1:Ataksinomitos pinakas --> to aitima sas einai se ekseliksi...\n");
                      srand(time(NULL));
           for (i=0; i<megethos; i++)
              {                  
                  pinakas[i]=rand()%10;

              }            
  
              key=1;
                                             
           }
     
     else if (epilogi==2)
          {    
               key=1;
          }
      
     else 
          {
           printf("--------------------Dwsate lathos epilogi--------------------\n"); 
           key=0;
     
          }
     
    
    }
     return megethos;
     }
     
//---------------------------------------------------------------------------------------------------------------------//     
     void EmfanisiPinaka(int *pinakas, int length)
      {
           int i;
         
           for( i=0; i<length; i++) 
           {
           printf(" To stoixeio %d tou pinaka einai : %d\n ",i+1,pinakas[i]);
           }
        
      }   
     
//---------------------------------------------------------------------------------------------------------------------//     
     void saveData(int *pinakas, int length){

FILE *fp;
int i;
fp=fopen(filename,"wb");
if (fp == NULL) {
         printf("To arxeio dn iparxei...\n");
         exit(0);
      }
	for (i=0; i<=length-1; ++i) fprintf(fp, "%d ", pinakas[i]);
         
		
fclose(fp);
}

//---------------------------------------------------------------------------------------------------------------------// 
void loadData(int *pinakas)
{
     FILE *fp;
     int i,mem;
     
     int c;
     i=0;
     fseek(fp,0,SEEK_END);
     mem=ftell(fp);
     fseek(fp,0,SEEK_SET);
     
     realloc(pinakas,mem); 
    if(pinakas==NULL) printf("Den yparxei arketi mnini gia dimiourgia enos pinaka \n");   

     fp=fopen(filename,"rb");
     do {
      c = fscanf(fp,"%d",pinakas[i]); 
      printf("%d\n",pinakas[i]);  
      i=i+1;     
   } while (c != EOF);
     
     fclose(fp);
    
} 
     

//---------------------------------------------------------------------------------------------------------------------//  
int bubblesort (int pin[],int megethos)
{
 int i,j,temp,c1=0;
 for(i=0; i<megethos; i++)
 {
          for(j=0; j<(megethos-i-1); j++) 
          {    
                   if(pin[j]>pin[j+1]) {
                                      temp = pin[j];
                                      pin[j] = pin[j+1];
                                      pin[j+1] = temp;  
                                      c1=c1+1;                                                    
                                      }
          }
}

 return c1;
}
 
 
 
//---------------------------------------------------------------------------------------------------------------------//  
int insertionSort(int pin[],int megethos)
{
        int i,j=0,temp,c2=0;

                        for(i=1; i<megethos; i++)
                        {
                                temp=pin[i];
                                j=i;
                                while((j>0)&&(pin[j-1]>temp))
                                {
                                        pin[j] = pin[j-1];
                                        j=j-1;                                                                                              
                                        pin[j]=temp;
                                        c2=c2+1;
                                }
                        }                      

 return c2;
}
 
  
    
//---------------------------------------------------------------------------------------------------------------------//       
int quickSort(int pin[], int left, int right,int diakoptis )
{
  int timi_diax, min, max,temp,i,c3=0;

  min = left;
  max = right;
  if(diakoptis==2 || diakoptis==3) 
  {
                   temp=euresi(right);
                   timi_diax = pin[temp];
  }
   
   if(diakoptis==3 && right<=100 ) 
           {
            c3=insertionSort(pin,right);
            return c3;
           }
                   
  timi_diax = pin[left];

  while( left < right )
  {
     while( (pin[right] >= timi_diax) && (left < right) )  right--;
           
        if( left != right )
            {
             pin[left] = pin[right];
             left++;
             c3=c3+1;
            }

     while( (pin[left] <= timi_diax) && (left < right) )  left++;

        if( left != right )
            {
             pin[right] = pin[left];
             right--;
             c3=c3+1;
            }
  }

  pin[left] = timi_diax;
  timi_diax = left;
  c3=c3+1;
  left = min;
  right = max;

    if(diakoptis==1)
        {
          if( left < timi_diax ) quickSort(pin, left, timi_diax-1,1 );
          if( right > timi_diax ) quickSort(pin, timi_diax+1, right,1 );          
        }
     else if(diakoptis==2)
     {
          if( left < timi_diax ) quickSort(pin, left, timi_diax-1,2 );
          if( right > timi_diax ) quickSort(pin, timi_diax+1, right,2 );
          }   


  return c3;
}
   
      
//---------------------------------------------------------------------------------------------------------------------//           
int euresi (int megethos)
      {
          int temp;
          srand(time(NULL));
          temp = rand()%megethos;
          return temp;
          }
          
//----------------------------------------------------TELOS ASKISIS-------------------------------------------------------//