我试图将带有保护的降序插入排序算法应用于纯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语言很陌生。