Cod sursa(job #2517208)

Utilizator thinkphpAdrian Statescu thinkphp Data 3 ianuarie 2020 07:35:25
Problema Sortare prin comparare Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
#include <malloc.h>
#define FIN "algsort.in"
#define FOUT "algsort.out"

void* read(){
      int i,n,*p;
      freopen(FIN, "r", stdin);
      scanf("%d",&n);
      //allocated space in heap
      p = (int*)malloc(sizeof(int)*(n+1));
      p[0] = n;  
      for(i = 1; i <= n;  ++i) {
           scanf("%d", p + i);
      }

      return p;
}

void write(int *p) {
     int i;
     freopen(FOUT, "w", stdout);

     for(i = 1; i <= *p; ++i) {

             printf("%d ", *(p + i)); 
     }
}

void c_s(int *p) {

     int n = p[0];
     float shrinkFactor = 1.3; 
     int swapped = 0, i, gap = *p;
 
     while(gap>0 || swapped) {

           swapped = 0;
           if(gap > 0) gap = gap / shrinkFactor;

           for(i = 1; (i + gap) < (n+1); ++i) {
                   if(p[i] > p[i+gap]) {
                      int holder = p[i];
                          p[i] = p[i+gap];
                          p[i+gap] = holder;
                          swapped = 1; 
                   }
           } 
     }
        
}

int main() {

    int *p,i;
    p = (int*)read();
    c_s(p);
    write(p);

    //clean up 
    free(p);   
    return(0);
}