Выводится неверный результат - 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].
- Конец внутреннего цикла.
- Конец внешнего цикла.
- Конец функции.