Сортировка слиянием - C (СИ) (147654)
Формулировка задачи:
Здравствуйте, у меня есть функция выполняющая сортировку слиянием.
Всё прекрасно работает, но у меня есть необходимость в том, чтобы все нули, если они есть, которые находятся в начале находились в конце массива. Как мне это реализовать?
void mergesort(long num, float a[]) { int rght, rend; int i, j, m; for (int k = 1; k < num; k *= 2) { for (int left = 0; left + k < num; left += k * 2) { rght = left + k; rend = rght + k; if (rend > num) rend = num; m = left; i = left; j = rght; while (i < rght && j < rend) { if (a[i] <= a[j]) { b[m] = a[i]; i++; } else { b[m] = a[j]; j++; } m++; } while (i < rght) { b[m] = a[i]; i++; m++; } while (j < rend) { b[m] = a[j]; j++; m++; } for (m = left; m < rend; m++) { a[m] = b[m]; } } } }
Решение задачи: «Сортировка слиянием»
textual
Листинг программы
void correct(int n, int * arr) // n - число элементов в массиве, arr - массив { int buf; for(int i = 0; i < n; ++i) { if(arr[i]){return;} buf = arr[n - i]; arr[n - i] = 0; arr[i] = buf; } return; }
Объяснение кода листинга программы
В данном коде реализована функция correct, которая выполняет сортировку массива методом слияния.
- В первой строке объявлена переменная buf, которая будет использоваться как временное хранилище для элементов массива.
- Далее, в цикле for, который выполняется столько раз, сколько элементов в массиве, происходит проверка: если элемент arr[i] не равен нулю, то функция correct сразу же возвращает управление. Это необходимо для того, чтобы функция не выполняла лишних операций, если массив уже отсортирован.
- Внутренний блок кода в цикле for выполняет следующие действия:
- Перемещает последний ненулевой элемент массива в буфер buf.
- Устанавливает значение arr[n-i] равным нулю, тем самым
отсекая
отсортированную часть массива. - Устанавливает значение arr[i] равным buf, то есть последнему ненулевому элементу.
- После завершения цикла, если все элементы массива были равны нулю, функция correct возвращает управление. Таким образом, функция correct выполняет сортировку массива методом слияния, разделяя массив на две части: отсортированную и неотсортированную, и затем объединяет их в одну отсортированную последовательность.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д