Пример программы:
// Функция объединяет два массива отсортированных по убыванию в один массив
// a, b - объединяемые массивы, c - результат, n - количество элементов в массивах а и b
void concatmas(int *a, int*b, int*c, int n)
{
int *a1=a, *b1=b, *c1=c;
int *i1=a+n, *j1=b+n;
while(a1<i1 && b1<j1)
if(*a1>*b1)
*c1++=*a1++;
else
*c1++=*b1++;
while(a1<i1)
*c1++=*a1++;
while(b1<j1)
*c1++=*b1++;
}
void quicksort(int *a, int *b, int n)
/* Выполняет быструю сортировку (слиянием)
a - сортируемый массив, b – промежуточный */
{
int t, p=1, q=n;
while(p<n)
{
#ifdef debug
printf("\np=%i, q=%i\n", p, q);
for(t=0; t<n; t++) printf("%i ", a[t]);
printf("\n");
#endif
for(t=0; t<q/2; t++)
concatmas(&a[2*t*p], &a[2*t*p+p], &b[2*t*p], p);
for(t=0; t<n; t++) a[t]=b[t];
p*=2; q/=2;
}
}
main()
{
int n = 8, i, ntest=4, it, f;
int c[4][8] = { {1, 2, 4, 4, 5, 6, 7, 8},
{8, 7, 6, 5, 4, 3, 2, 1},
{1, 2, 8, 7, 3, 4, 6, 5},
{1, 8, 2, 7, 3, 6, 5, 4} };
int d[4][8] = { {8, 7, 6, 5, 4, 4, 2, 1},
{8, 7, 6, 5, 4, 3, 2, 1},
{8, 7, 6, 5, 4, 3, 2, 1},
{8, 7, 6, 5, 4, 3, 2, 1} };
int a[8];