C:带保护的降序插入排序

时间:2018-12-20 02:09:10

标签: c arrays algorithm sorting insertion-sort

我试图将带有保护的降序插入排序算法应用于纯C中的一维int数组。尽管我已经设法实现了没有保护的常规降序排序,但是不幸的是,我被迫使用按要求守卫。令我感到羞耻的是,我不明白该算法的降级版本中使用了什么防护措施。在这里似乎没有任何意义。我试图简单地“还原”一个升序的插入排序:也就是说,在降序情况下,将有意识地为保护元素分配大于数组中任何其他元素的值:

#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语言很陌生。

0 个答案:

没有答案