Сортировка вставками последовательности элементов, отстоящих друг от друга - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Можете подробно обьяснить программу???
void shellSort(int a[], int size);
int increment(int inc[], int size);
 
int main () {
 int j,m=0,in_mas[100];
    printf("\nVvedite chislo elementov massiva: ");
    scanf("%d", &m); 
    printf("\nVvedite massiv:");
    printf("\n");
    printf("\n");
 for(j = 0; j < m; j++) {
  scanf("%d", &in_mas[j]); 
 }
            shellSort(in_mas, m);
            printf ("\n");
            printf ("\n");
}
 
void shellSort(int a[], int size) {
 int inc, s, i, j, seq[40];
            s = increment(seq, size);
        while (s >= 0) {
        inc = seq[s--];
            for (i = inc; i < size; i++) {
            int temp = a[i];
            for (j = i-inc; (j >= 0) && (a[j] > temp); j -= inc) {
                                            a[j+inc] = a[j];
                                            }
            a[j+inc] = temp;
            }
        }
    printf("\n");
    for(i = 0; i < size; ++i) {
    printf("%d ", a[i]);
    }
}
 
int increment(int inc[], int 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;
 }
         while(3*inc[s] < size);  
 
    return s > 0 ? --s : 0;
}

Решение задачи: «Сортировка вставками последовательности элементов, отстоящих друг от друга»

textual
Листинг программы
void shellSort(int a[], int size);
int increment(int inc[], int size);
 
int main () 
{
   int j,m=0,in_mas[100];
   printf("\nVvedite chislo elementov massiva: ");
   scanf("%d", &m);
   printf("\nVvedite massiv:");
   printf("\n");
   printf("\n");
   for(j = 0; j < m; j++) scanf("%d", &in_mas[j]);
 
   shellSort(in_mas, m);
 
   printf ("\n");
   printf ("\n");
 
}
 
void shellSort(int a[], int size) 
{
    int inc, s, i, j, seq[40];
 
    s = increment(seq, size);  /* получение последовательности */
 
    while (s >= 0) 
    {
 
       /* сортировка вставками последовательности 
           элементов, отстоящих друг от друга на inc */
 
       inc = seq[s--];
       for (i = inc; i < size; i++) 
       {
           int temp = a[i];
           for (j = i-inc; (j >= 0) && (a[j] > temp); j -= inc) 
           {
             a[j+inc] = a[j];
           }
           a[j+inc] = temp;
       }
    }
 
    printf("\n");
    for(i = 0; i < size; ++i) printf("%d ", a[i]);
 
}
 
/* Построение последовательности */
 
int increment(int inc[], int 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;
  } while(3*inc[s] < size);
 
  return s > 0 ? --s : 0;
 
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.545 из 5
Похожие ответы