Сортировка вставками последовательности элементов, отстоящих друг от друга - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д