Выводится неверный результат - C (СИ)
Формулировка задачи:
Добрый вечер!
Ниже приведённый код, это сортировка массива алгоритмом Шелла. Непонятно почему программа выводит не отсортированный 2D массив, а какие-то случайные числа, похожие на адрес, где сидят элементы отсортированного 2D массива.
//int mas[ n ], i, j, k, mid; for ( i = 0; i < n; i++ ) for ( j = i; j < n; j++ ) for ( k = j - i; k >= 0; k -= i ) { if ( matrica[ i + k] >= matrica[ k ] ); break; } { mid = matrica [ k ]; matrica[ k ] = matrica[ i + k] ; matrica[ i + k ] = mid; } printf( "\n\n"); printf( "%d", mid);
Решение задачи: «Выводится неверный результат»
textual
Листинг программы
void shell(int* array, int kol) { if(array==NULL || *array == NULL) printf("Массив пуст или не создан! Сортировка невозможна!!!\n"); else { int g[5]={5,4,3,2,1}; int m; int j; for(int k=0; k<5; k++) { g=r[k]; for(int i=g; i < kol; ++i) { m = array[i]; for(j=i-g; (m > array[j]) && (j >= 0); j=j-g) array[j+g] = array[j]; array[j+g] = m; } } } }
Объяснение кода листинга программы
Список элементов кода:
- Проверка на пустой или не созданный массив.
- Объявление временной переменной типа int для хранения значения.
- Объявление переменной типа int для хранения значения индекса.
- Внешний цикл от 0 до 5.
- Внутренний цикл от i до kol.
- Передача значения i в переменную m.
- Внутренний цикл от j до i-g.
- Условие для сравнения значений m и array[j].
- Если условие истинно, то перемещение значения array[j] в array[j+g].
- Запись значения m в array[j+g].
- Конец внутреннего цикла.
- Конец внешнего цикла.
- Конец функции.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д