我很难理解我的代码是否产生了正确数量的交换和比较。在这三种情况下,我得到相同的数字,这与插入排序不同。根据我的理解,shell sort是一种改进的插入,它对按空格排序的数字集执行插入排序,这使我怀疑这些值是否正确。
我曾尝试在其他地方对它们进行计数,但我相信我在正确的位置有它们。我获得的值的唯一差异是当我更改差距时,这显然会改变算法的效率,但这是唯一改变效率的事情吗?还是我的价值观不正确?
int Sort(int arr[])
{
int n = arr.length;
int exchanges = 0, comparisons = 0;
// Start with a big gap, then reduce the gap
for (int gap = n/2; gap > 0; gap = gap*3 + 1)
{
//gapped insertion sort
for (int i = gap; i < n; i += 1)
{
// add a[i] to the elements that have been gap
// sorted save a[i] in temp and make a hole at
// position i
exchanges++;
int temp = arr[i];
// shift earlier gap-sorted elements up until
// location for a[i] is found
int j;
for (j = i; j >= gap && arr[j - gap] > temp; j -= gap)
arr[j] = arr[j - gap];
comparisons++;
// put temp correct location
arr[j] = temp;
exchanges++;
}
}
}
我希望对于随机值集会得到不同的结果。我知道缺口序列对它进行部分排序,但是我得到了Exchanges(Swaps)的值-10&比较-5 从1到10的递增,递减和随机值。这让我不敢相信自己的价值观是正确的。 shell排序是否会使插入排序输入不敏感?任何帮助/输入表示赞赏。