Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 递归插入排序的运行时间的递归_C_Relation_Recurrence_Insertion Sort - Fatal编程技术网

C 递归插入排序的运行时间的递归

C 递归插入排序的运行时间的递归,c,relation,recurrence,insertion-sort,C,Relation,Recurrence,Insertion Sort,目前,我被指派编写插入排序算法的递归版本。我做到了。事实上,这是: void recursiveInsertionSort(int* inputArray, int p, int q) { while (q > p) { recursiveInsertionSort(inputArray, p, q-1); if (inputArray[q-1] > inputArray[q]) { int temp = inputArray

目前,我被指派编写插入排序算法的递归版本。我做到了。事实上,这是:

void recursiveInsertionSort(int* inputArray, int p, int q)
{
  while (q > p)
  { 
     recursiveInsertionSort(inputArray, p, q-1);
     if (inputArray[q-1] > inputArray[q])
     {
         int temp = inputArray[q];
         int temp2 = inputArray[q-1];
         inputArray[q] = temp2;
         inputArray[q-1] = temp;
         q--;
     }
  }
}
我的问题有两方面。首先,我不确定我提出的递归关系是否正确。我想出了

T(n) = T(n-1) + T(n^2) 
作为我的重复关系。是这样吗?我在那和那之间跳来跳去

T(n) = T(n^2)
第二,我应该用代数来证明这一点

f(n) = ((n+1)n / 2) 
解这个递归关系。我很难做到这一点,因为a.我不确定我的重复是否正确,B.我有时在数学方面很糟糕

如果您能在任何问题上提供帮助,我们将不胜感激

谢谢

好吧,我在一位数学教授的帮助下设法弄明白了:p我将把这个放在这里,让其他人知道怎么做。有人应该抄写这个作为答案:D

所以这个的递推关系应该是T(n)=T(n-1)+n,而不是我原来的,这是主要的问题。为什么?这是做递归回程所需的时间,它是n-1,因为如果你去n,你将只有一个元素,并且已经排序好了。加上执行一次插入或一次实际排序所需的时间

之所以是n,是因为当你到达那里的时候,你在检查一个数字,与它之前的每一个数字,恰好是n次

现在你如何证明函数f(n)解T(n)

我们知道f(n)解T(n)。这意味着你可以做到:

We know that f(n) is equal to (n(n+1))/2 . So if T(n) is equal to T(n-1) + n, that means we take away 1 from every n in f(n) and then plug that into T(n).

That gives us T((n+1-)n-1)/2)) + n . That simplifies to T((n(n-1)/2) + n. Take that + n thats out there and multiply it by 2/2 to be able to have it all over a common denominator. Giving you (n^2 - n + 2n)/2 . Simplifies down to ((n^2) + n)/2 which further simplifies to, if you factor out an n, (n(n+1))/2. Which is f(n).

平方从何而来?当输入已排序时,此函数是否终止?在我看来,
inputArray[q-1]
将小于
inputArray[q]
,而q将在做同样事情的另一个循环中保持不变。在我的大脑中是这样的。Q>P检查应该在函数全部排序后终止该函数,因为每次调用Q时Q都会递减。我想不管怎样,如果我错了,请告诉我。我一直在试图找出这个递归关系和函数,我可能忽略了一些东西。@neojb1989我看到代码的问题是q没有递减的情况。无论是排序的大小写,还是相反的大小写,都会使q保持不变(因为
q--
if
块中),所以循环会无限期地重复相同的q值。问题是,保持这种状态意味着问题仍然存在。您最终应该使用下面的“回答”按钮回答您自己的问题,这样它就会关闭,删除该问题,这样人们就不会一直在这里结束,或者希望其他人标记它已关闭,以便为您清理。平方从何而来?当输入已排序时,此函数是否会终止?在我看来,
inputArray[q-1]
将小于
inputArray[q]
,而q将在做同样事情的另一个循环中保持不变。在我的大脑中是这样的。Q>P检查应该在函数全部排序后终止该函数,因为每次调用Q时Q都会递减。我想不管怎样,如果我错了,请告诉我。我一直在试图找出这个递归关系和函数,我可能忽略了一些东西。@neojb1989我看到代码的问题是q没有递减的情况。无论是排序的大小写,还是相反的大小写,都会使q保持不变(因为
q--
if
块中),所以循环会无限期地重复相同的q值。问题是,保持这种状态意味着问题仍然存在。你最终应该使用下面的回答按钮来回答你自己的问题,这样它就会关闭,删除问题,这样人们就不会一直在这里结束,或者希望其他人标记它关闭,以便为你清理。