Я пытаюсь применить алгоритм сортировки по убыванию с защитой к одномерному массиву int в чистом C. Хотя мне уже удалось реализовать обычную сортировку по убыванию без охраны, к сожалению, я вынужден использоватьохранник в соответствии с требованиями.К своему стыду, я не понимаю, для чего используется защита в нисходящей версии этого алгоритма;это просто не имеет смысла здесь.Я попытался просто «вернуть» сортировку по возрастанию вставки: то есть, в нисходящем случае элементу защиты было бы преднамеренно присвоено значение, большее, чем любое другое значение в массиве:
#include <stdio.h>
#include <stdlib.h>
#define GUARD 32767
void insertion_sort(int size, int *array){
int temp, next, oldZero = array[0];
array[0] = GUARD;
for(int i = 0; i < size-1; i++){
int j = i + 1;
temp = array[j];
while(j > 0 && temp > array[j-1]){
array[j] = array[j-1];
j--;
}
array[j] = temp;
}
array[0] = oldZero;
/**No ideas so far*/
}
По-видимому, теперь у меня естьдобавить своего рода дополнительную сортировку здесь, чтобы переместить oldZero на свою позицию.Я полагаю, что простого цикла while, сравнивающего oldZero с его соседями, было бы достаточно.Однако такие манипуляции выглядят неуклюже и, возможно, мне не хватает более элегантного решения.
Есть ли правильный способ использовать сортировку по убыванию с защитой?Если да, какие шаги я должен применить или удалить из моего решения?
Пожалуйста, извините, если мой вопрос слишком простой, так как я совершенно новичок в C.