C: сортировка по убыванию с защитой - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь применить алгоритм сортировки по убыванию с защитой к одномерному массиву 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.

...