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 swap(int *x , int *y);
void bubblesort (int *pin,int megethos);
void insertionSort(int *pin,int megethos);
void quickSort(int a[], int left, int right,int diakoptis );
int euresi (int megethos);
int main(void)
{
int choice,*pinakas,megethos,memory,tyxaio_stoix;
pinakas=(int *)malloc(1*sizeof(int));
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:bubblesort(pinakas,megethos); break;
case 6:insertionSort(pinakas,megethos);break;
case 7:quickSort(pinakas,0,megethos-1,1); break;
case 8:quickSort(pinakas,0,megethos-1,2); break;
case 9:break;
case 0:exit(0);
}
}while(1);
free(pinakas);
}
int menu(void){
int choice;
do{
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("choice: ");
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;
printf("%d\n",pinakas[i]);
}
printf("megethos:%d\n",megethos);
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("I couldn't open pinakas.txt for writing.\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;
fp=fopen(filename,"rb");
fseek(fp,0,SEEK_END);
mem=ftell(fp);
fseek(fp,0,SEEK_SET);
i=0;
//free(pinakas);
//pinakas=malloc(mem*sizeof(int));
realloc(pinakas,mem);
if(pinakas==NULL) printf("Den yparxei arketi mnini gia dimiourgia enos pinaka \n");
printf("%d\n",mem);
/*while(feof(fp)==1)
{
fscanf(fp,"%d \n",&pinakas[i]);
printf("%d",pinakas[i]);
i=i+1;
}*/
for(i=0; i<mem/4; i++)
{
fscanf(fp,"%d \n",&pinakas[i]);
printf("%d",pinakas[i]);
}
fclose(fp);
}
int swap(int *x , int *y)
{
int temp;
temp=*y;
*x=*y;
*y=temp;
}
void bubblesort (int pin[],int megethos)
{
int i,j,temp;
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;
}
}
}
printf("Ta stoixeia tou pianka meta tin taxinomisi einai:\n");
for(i=0; i<megethos; i++) printf("%d\n",pin[i]);
}
void insertionSort(int pin[],int megethos)
{
int i,j=0,temp;
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;
}
}
printf("Ta stoixeia tou pianka meta tin taxinomisi einai:\n");
for(i=0; i<megethos; i++) printf("%d\n",pin[i]);
}
void quickSort(int pin[], int left, int right,int diakoptis )
{
int timi_diax, min, max,temp,counter=0;
min = left;
max = right;
if(diakoptis==2)
{
temp=euresi(right);
timi_diax = pin[temp];
}
timi_diax = pin[left];
while( left < right )
{
while( (pin[right] >= timi_diax) && (left < right) ) right--;
if( left != right )
{
pin[left] = pin[right];
left++;
counter=counter+1;
}
while( (pin[left] <= timi_diax) && (left < right) ) left++;
if( left != right )
{
pin[right] = pin[left];
right--;
counter=counter+1;
}
}
pin[left] = timi_diax;
timi_diax = left;
counter=counter+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 );
}
printf("Eginan %d antimetatheseis!",counter);
}
int euresi (int megethos)
{
int temp;
srand(time(NULL));
temp = rand()%megethos;
return temp;
}