wtorek, 13 marca 2018

Sorting using the heap-algorithm (C-gcc)

#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