GVA SUPPORT

Відповідь на запитання № 1334697375
Text:
	ФІО = GVA

 Запитання:/*
Тема: Методи сортування
Завдання: Розробити програму сортування методом Шелла
Програма повинна забезпечувати  введення чи генерацію вихідних даних і візуалізувати результати сортування.


*/
#include <iostream>
#include <stdio.h>
#define N 10
using namespace std;

void autoentermas(int a[], size_t length) {
        randomize();
        for (int i = 0 ; i < length ; i++)
        {
                a[i] = rand() % 40;
        }
        return ;
}
void printmas(int a[], size_t length) {
        for (int i = 0 ; i < length ; i++)
        {
                cout<<a[i]<<" ";
        }
        cout<<endl;
        return ;
}
int increment(long inc[], long size) {
// inc[] массив, в которые заносятся инкременты
// size размерность этого массива
 int p1, p2, p3, s;
 
  p1 = p2 = p3 = 1;
  s = -1;
  do {// заполняем массив элементов по формуле Роберта Седжвика
    if (++s % 2) {
      inc[s] = 8*p1 - 6*p2 + 1;
    } else {
      inc[s] = 9*p1 - 9*p3 + 1;
      p2 *= 2;
      p3 *= 2;
    }
        p1 *= 2;
// заполняем массив, пока текущая инкремента хотя бы в 3 раза меньше количества элементов в массиве
  } while(3*inc[s] < size);  
 
  return s > 0 ? --s : 0;// возвращаем количество элементов в массиве
}
 
template<class T>
void shellSort(T a[], long size) {
// inc инкремент, расстояние между элементами сравнения
// i и j стандартные переменные цикла
// seq[40] массив, в котором хранятся инкременты
  long inc, i, j, seq[40];
  int s;//количество элементов в массиве seq[40]
 
  // вычисление последовательности приращений
  s = increment(seq, size);
  while (s >= 0) {
        //извлекаем из массива очередную инкременту
        inc = seq[s--];
// сортировка вставками с инкрементами inc
    for (i = inc; i < size; i++) {
      T temp = a[i];
// сдвигаем элементы до тех пор, пока не дойдем до конца или не упорядочим в нужном порядке
      for (j = i-inc; (j >= 0) && (a[j] > temp); j -= inc)
        a[j+inc] = a[j];
// после всех сдвигов ставим на место j+inc элемент, который находился на i месте
      a[j+inc] = temp;
      printmas(a,size);
    }
  }
}
int main(){
        int mas[N];
        autoentermas(mas, N);
        cout<<"CURRENT -> "; printmas(mas,N);
        shellSort(mas,N);
        cout<<"RESULT  -> "; printmas(mas,N);
        system("pause");
        return 0;
}

====================================	
Ваша відповідь