0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 25
1

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

09.04.2013, 17:37. Показов 638. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можете подробно обьяснить программу???
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2013, 17:37
Ответы с готовыми решениями:

Найти максимальное произведение элементов массива, отстоящих друг от друга на расстоянии больше или равном 8
Задача егэ с4 ,нужно решить с минимальной сложность ,задача такова: у нас дан массив , длинной...

Нарисовать 10 разноцветных вертикальных линий отстоящих друг от друга на равном расстоянии
Нарисовать 10 разноцветных вертикальных линий отстоящих друг от друга на равном расстоянии, причем...

Нарисовать 10 разноцветных вертикальных линий отстоящих друг от друга на равном расстоянии
Нарисовать 10 разноцветных вертикальных линий отстоящих друг от друга на равном расстоянии, причем...

Вычислить значения функции на отрезке в заданном числе N равномерно отстоящих друг от друга точек
Помогите пожалуйста

1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36367 / 19816 / 4152
Регистрация: 12.02.2012
Сообщений: 32,942
Записей в блоге: 13
09.04.2013, 20:00 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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;
 
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2013, 20:00
Помогаю со студенческими работами здесь

Вычислить значения функции на отрезке в заданном числе равномерно отстоящих друг от друга точек
Вычислить значения функции на отрезке в заданном числе равномерно отстоящих друг от друга точек /...

Вычислить значения функции на отрезке в заданном числе равномерно отстоящих друг от друга точек
1) Вычислить значения функции на отрезке в заданном числе равномерно отстоящих друг от друга...

Вычислить значения функции на отрезке в заданном числе равномерно отстоящих друг от друга точек
Друзья,помогите пожалуйста..Не пойму как рассчитать шаг и вообще как все это произвести... ...

Вычислить значения функции на отрезке в заданном числе равномерно отстоящих друг от друга точек
Вычислить значения функции на отрезке в заданном числе N=9 равномерно отстоящих друг от друга...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru