Добавил:
Tushkan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы / ЛЗ3 / Unit2
.cpp//---------------------------------------------------------------------------
#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
struct tip
{int y[100];
int key;
};
void Sing (struct tip x[], int n)
{
struct tip t, tt;
int h, i, j, k, L, m, ij;
int IL[26], IU[26];
m=0; i=0; h=n-1; j=h;
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];
}
if (x[j].key < t.key)
{
x[ij] = x[j];
x[j] = t;
t = x[ij];
if (x[i].key > t.key)
{
x[ij] = x[i];
x[i] = t;
t = x[ij];
}
}
do
{
do {L--; }
while (x[L].key > t.key);
do {k++; }
while (x[k].key < t.key);
if (k < L)
{
tt = x[L];
x[L] = x[k];
x[k] = tt;
}
}while (k <= L);
if (L-i > j-k)
{if (L-i > 9)
{
IL[m] = i;
IU[m] = L;
m++;
}
i = k;
}
else
{
if (j-k > 9)
{
IL[m] = k;
IU[m] = j;
m++;
}
j = L;
}
if (j-i < 10)
{
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];
if (x[k].key < t.key)
{
do
{x[k-1] = x[k];
k++;
} 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--;
}
x[h] = tt;
return;
}
Соседние файлы в папке ЛЗ3