#include <stdio.h>
#include <math.h>
#include <inttypes.h>
#include <stdlib.h>
#include <x86intrin.h>

#include <limits.h>

const int N=1024*256;
int ner (int *a, int *b){return *a - *b;}

long long te_1(int N){
   int* volatile arr=malloc(sizeof(int)*N);
   for (int i=0;i<N;i++)
      arr[i]=i*i*i*i;

   long long t1,t2;
   t1=_rdtsc();
   qsort(arr, N, sizeof(int), (void*)ner);
   t2=_rdtsc();

   free(arr);
   return (t2-t1);
}

long long te_2(int N){
    int* volatile arr=malloc(sizeof(int)*N);
   for (int i=0;i<N;i++)
      arr[i]=i*i*i*i;

   long long t1,t2;
   long long m=0,e;
   t1=_rdtsc();
   for (int i=0;i<N;i++)
      for (int j=i+1;j<N;j++){
         e=abs(arr[j]-arr[i]);
         if (e>m) m=e;
      }
   t2=_rdtsc();
   free(arr);
   return (t2-t1);
}


int main(){
   printf("\n sizeof(size_t): %d\n\n",(int)sizeof(size_t));
   printf("        ===  Sortirovka :3  === \n");
   for (int o=0;o<3;o++){
      int mm[]={10,100,1000,10000,100000,1000000};
      for (int i=0;i<sizeof(mm)/sizeof(*mm);i++)
         printf(" %11d: %-11lld\n",mm[i],te_1(mm[i]));
      printf(" \n");
   }
   printf("        ===  pari :2  === \n");
   for (int o=0;o<3;o++){
      int mm[]={31, 100, 316, 1000, 3162, 10000, 31622};
      for (int i=0;i<sizeof(mm)/sizeof(*mm);i++)
         printf(" %11d: %-11lld\n",mm[i],te_2(mm[i]));
      printf(" \n");
   }
   system("pause");
}
