Добавил:
Tushkan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы / ЛЗ2 / Unit1
.c//---------------------------------------------------------------------------
#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