#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#define MAX 1000
#define SIZE 50
int is_First(int value)
{
int i,sum;
sum=0;
for(i=1;i<value+1;i++)
if(value%i==0)
++sum;
if(sum==2)
return 1;
else
return 0;
}
int *big_table;
int *original_table;
int *sorting_table;
int temp_value;;
void init_Tables()
{
int i,j;
temp_value=0;
big_table=malloc(sizeof*big_table*(MAX+1));
if(!big_table)
{
perror("malloc");
return EXIT_FAILURE;
}
original_table=malloc(sizeof*original_table*(SIZE+1));
if(!original_table)
{
perror("malloc");
return EXIT_FAILURE;
}
sorting_table=malloc(sizeof*original_table*(SIZE+1));
{
if(!sorting_table)
{
perror("malloc");
return EXIT_FAILURE;
}
}
i=0;
j=2;
do
{
if(is_First(j))
{
big_table[i]=j;
++i;
}
++j;
}while(i<MAX);
for(i=0;i<SIZE;i++)
original_table[i]=big_table[rand()%MAX];
}
void go_Up()
{
int temp,temp_size;
temp=sorting_table[temp_value];
temp_size=temp_value;
while((temp_size!=1)&&(sorting_table[temp_size/2]<=temp))
{
sorting_table[temp_size]=sorting_table[temp_size/2];
temp_size=temp_size/2;
}
sorting_table[temp_size]=temp;
}
void go_Down()
{
int i,temp_left,temp_change;
i=1;
while(1)
{
temp_left=(2*i);
if(temp_left>temp_value)
break;
if(temp_left+1<=temp_value)
if(sorting_table[temp_left]<sorting_table[temp_left+1])
temp_left++;
if(sorting_table[i]>=sorting_table[temp_left])
break;
temp_change=sorting_table[temp_left];
sorting_table[temp_left]=sorting_table[i];
sorting_table[i]=temp_change;
i=temp_left;
}
}
void Insert(int value)
{
sorting_table[++temp_value]=value;
go_Up();
}
void free_Tables()
{
free(sorting_table);
free(original_table);
free(big_table);
}
int Cheap()
{
int i,temp;
temp=temp_value-1;
i=sorting_table[1];
sorting_table[1]=sorting_table[temp];
go_Down();
return i;
}
int main(int argc, char **argv)
{
int i,j;
srand(time(NULL));
init_Tables();
printf("Original table:\n");
for(i=0;i<SIZE;i++)
printf("%d ,",original_table[i]);
for(i=0;i<SIZE;i++)
Insert(original_table[i]);
for(i=SIZE;i>0;i--)
original_table[i-1]=Cheap();
printf("\n\n\n");
printf("Sorted table:\n");
for(i=0;i<SIZE;i++)
printf("%d ,",original_table[i]);
free_Tables();
return 0;
}
Brak komentarzy:
Prześlij komentarz