Сортировка Шелла - C (СИ) (76657)
Формулировка задачи:
Помогите пожалуйста сделать сортировку Шелла. Тип входных данных целочисленный. Направление сортировки по убыванию. Объсните что да как.
Заранее спасибо)
Решение задачи: «Сортировка Шелла»
textual
Листинг программы
#define N 10
void swap(int& n1, int& n2);
int main()
{
int A[10] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
for (int gap = N-1; gap >= 0; gap--)
for (int i = 0; (i + gap) < N; i++)
if (A[i] > A[i + gap]) swap(A[i],A[i+gap]);
for (int k = 0; k < 10; k++)
printf("%d ",A[k]);
printf("\n");
return 0;
}
void swap(int& n1, int& n2)
{ int _t = n1; n1 = n2; n2 = _t; }
Объяснение кода листинга программы
- В данном коде реализуется алгоритм сортировки Шелла (Shell sort).
- Массив A инициализируется значениями {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}.
- Переменная gap устанавливается равной N-1, где N — размер массива.
- В цикле for перебираются все значения gap от N-1 до 0.
- Внутренний цикл for перебирает все элементы массива A с шагом gap + 1.
- Если текущий элемент больше следующего, то они меняются местами с помощью функции swap.
- Функция swap принимает два аргумента типа int& (указатель на int), которые передаются по ссылке, и меняет их значения местами.
- После завершения внутренних циклов выводится отсортированный массив A с помощью функции printf.
- Возвращаемое значение функции main() равно 0, что означает успешное завершение работы программы.