Выводится неверный результат - 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].
- Конец внутреннего цикла.
- Конец внешнего цикла.
- Конец функции.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д