Shell排序比较和交换提示

时间:2019-03-27 00:05:45

标签: java algorithm sorting big-o shellsort

我很难理解我的代码是否产生了正确数量的交换和比较。在这三种情况下,我得到相同的数字,这与插入排序不同。根据我的理解,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排序是否会使插入排序输入不敏感?任何帮助/输入表示赞赏。

0 个答案:

没有答案