09 2013 档案
摘要:归并排序,典型的分治思想,时间复杂度为O(nlogn)。一、数组递归:void MergeSort(int* array, int low, int high, int* auxiliary_array){ if (low >= high) return; int mid = low + (high - low) / 2; MergeSort(array, low, mid, auxiliary_array); MergeSort(array, mid + 1, high, auxiliary_array); int i = low; int j = mid...
阅读全文
摘要:一、算法导论上的快速排序void swap(int* value1, int* value2){ int temp = *value1; *value1 = *value2; *value2 = temp;}void QuickSort(int* array, int low, int high){ if (low >= high) return; int i = low - 1; for (int j = low; j = high) return; int key = array[low];//pivot int i = low; in...
阅读全文
摘要:一般的Fibonacci算法:int Fibonacci(int number){ if (number > 1), matrix); } else { return MatrixPower(MatrixMultiply(matrix, matrix), exponent >> 1); }}int Fibonacci(int number){ if (number > 1; } return result.m_00;}利用了{f(n), f(n-1), f(n-1), f...
阅读全文
摘要:一、尾递归 一般的递归如果递归次数过多就可能会遇到栈溢出,这是由于每个线程在执行代码时,都会分配一定尺寸的栈空间(Windows系统中为1M),每次方法调用时都会在栈里储存一定信息(如参数、局部变量、返 回地址等等),这些信息再少也会占用一定空间,成千上万个此类空间累积起来,自然就超过线程的栈空间了。不过这个问题并非无解,我们只需把递归改成如下形式即可(在这篇文章里我们不考虑非递归的解法)int Factorial(int number, int accumulator){ if (number continuation){ if (0 == number) return co...
阅读全文

浙公网安备 33010602011771号