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