Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
13
Добавлен:
28.06.2014
Размер:
3.2 Кб
Скачать
//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <dos.h>

//---------------------------------------------------------------------------
#pragma argsused
struct time t1, t2;
struct tip
{int m;
 int key;
};
struct tip x[10000000];
int Sing (struct tip x[], int n, int a)
{
 struct tip t, tt;
 int h, i, j, k, L, m, ij, p;
 int IL[26], IU[26];

 m=0; i=0; h=n-1; j=h;   p = 0;
 do
 {
       ij = (i + j)/2;
       t=x[ij];
       k=i;
       L=j;
       if (x[i].key > t.key)
        {
         x[ij] = x[i];
         x[i] = t;
         t = x[ij];
         p++;
        }
       if (x[j].key < t.key)
        {
         x[ij] = x[j];
         x[j] = t;
         t = x[ij];
         p++;
         if (x[i].key > t.key)
          {
           x[ij] = x[i];
           x[i] = t;
           t = x[ij];
           p++;
          }
         }
   do
   {
     do  {L--; p++; }
     while (x[L].key > t.key);
     do {k++; p++;}
     while (x[k].key < t.key);
     if (k < L)
      {
       tt = x[L];
       x[L] = x[k];
       x[k] = tt;
       p++;
      }
   }while (k <= L);
     if (L-i > j-k)
      {if (L-i > a)
        {
         IL[m] = i;
         IU[m] = L;
         m++;
        }
       i = k;
      }
     else
      {
       if (j-k > a)
       {
       IL[m] = k;
       IU[m] = j;
       m++;
       }
       j = L;
      }
     if (j-i < a+1)
      {
      m--;
      if (m < 0)
       break;
      i = IL[m];
         j = IU[m];
      }
  }
  while (m>=0);

          tt = x[h];
          x[h].key = 10000000;
          for (j = h-2;j>=0;j--)
           {
            k = j+1;
            t = x[j];
            p++;
            if (x[k].key < t.key)
             {p++;
              do
               {x[k-1] = x[k];
                k++;
                p++;
               }      while (x[k].key < t.key);
              x[k-1] = t;
             }
           }
          if (h>0)
           while (tt.key < x[h-1].key)
            {
             x[h] = x[h-1];
             h--;
             p++;
            }
          x[h] = tt;
          p++;
 return p;
}


void main()
{
int  n, i, f, c, k, a;
clock_t start, end;
do
{
printf("Vvedite chislo elementov\n");
scanf("%d",&n);
srand(time(NULL));
for (i=0;i<n;i++)
 x[i].key = 0 + rand()%1000;

printf("Vvedite parametr\n");
scanf("%d",&a);
/*
printf("Chast' massiva\n");
for (i=0; i<10; i++)
 printf("%d ",x[i].key);
                  */
   start = clock();

k = Sing(x,n,a);

   end = clock();
   printf("The time was: %f\n", (end - start) / CLK_TCK);

printf("Chislo operacii: %d\n",k);
     /*
printf("\nOtsortirovannii massiv\n");
for (i=0; i<10; i++)
 printf("%d ",x[i].key);     */

f = 0;
for (i=0;i<n-1;i++)
 if (x[i].key<=x[i+1].key)
   f = 1;

if (f) printf("\nSortiruet\nChtobi zakonchit' nagmite 'y'\n\n");
}
while ((c = getchar()) != 'y');
}
//---------------------------------------------------------------------------


Соседние файлы в папке ЛЗ2
  • #
    28.06.201465.54 Кб12Project1.tds
  • #
    28.06.201498 б12Project2.bpf
  • #
    28.06.20143.45 Кб12Project2.bpr
  • #
    28.06.2014876 б12Project2.res
  • #
    28.06.201465.54 Кб12Project2.tds
  • #
    28.06.20143.2 Кб13Unit1.c
  • #
    28.06.20145.97 Кб12Unit1.obj
  • #
    28.06.20143.14 Кб12Unit1.~c
  • #
    28.06.201420.99 Кб14Графики.xls
  • #
    28.06.201445.57 Кб19Отчет ЛЗ2.doc