
算法
一只夏虫
这个作者很懒,什么都没留下…
展开
-
C++快速排序算法
#includeusing namespace std;void Swap(int &p,int &q){ int temp; temp = p; p = q; q = temp;}int Partition(int InputArray[],int nLow,int nHigh){ int i = nLow+1; int j = nHigh; bool directi原创 2013-11-03 09:40:25 · 622 阅读 · 0 评论 -
C++合并排序算法
#includeusing namespace std;int Merge(int Sumarray[],int Larray[],int Llength,int Rarray[],int Rlength){ int i=0,j=0,k=0; while ((i<Llength+1)&&(j<Rlength+1)) { if (Larray[i]<=Rarray[j]) {原创 2013-11-03 13:04:24 · 1145 阅读 · 0 评论 -
用栈和迭代求解斐波那契数的非递归算法
(1)用栈求解斐波那契数的非递归算法。递归算法为:long Fib( long n){ if(n<=1) return n; else return Fib(n-1) + Fib(n-2);}其递归计算的次序可用如下图所示的递归调用树来描述。为了计算Fib(4),必须先计算Fib(3),为了计算Fib(3),必须先计算Fib(2),再计算Fib(1)及Fib(0),Fib(1)和原创 2013-11-19 19:01:38 · 3350 阅读 · 0 评论 -
C++快速排序 精简版
快速排序是一种基于分治技术的重要排序算法。下面是C++快速排序精简版。头文件 QuickSort.h:void Swap(int &p,int &q){ int temp; temp = p; p = q; q = temp;}int Partition(int InputArray[],int nLow,int nHigh){ int i = nLow,j = n原创 2013-11-08 20:16:41 · 1792 阅读 · 0 评论 -
分治法---大整数相乘
题目:大数相乘,例如:a=423405293459和b=323452345234533相乘a*b。这里我们采用分治的思想:1:将该问题分成b的每个数和a相乘。2:将每个数和a相乘得到结果存入一个数组中,每个数对应一个数组。3:合并每个数组,相加。#include#includeusing namespace std;void main(){转载 2013-11-08 21:06:10 · 1148 阅读 · 0 评论 -
折半查找的递归和非递归实现(C++)
int BinarySearch(int a[],int nLow,int nHigh,int k){ //实现非递归的折半查找 //输入:一个升序数组a[0...nHigh]和查找键k //输出:一个数组元素的下标,该元素等于k;如果没有这样一个元素,则返回-1 int l=nLow,r=nHigh,mid; while (l<=r) { mid=(l+r)/2; if (k原创 2013-11-09 18:57:21 · 3410 阅读 · 0 评论 -
C++插入排序算法
#includeusing namespace std;int InsertionSort(int a[],int n){ //用插入排序对给定数组排序 //输入:n个可排序元素构成的一个数组a[0...n-1] //输出:非降序排列的数组a[0...n-1] int i,j,value; for (i = 1; i < n; i++) { value=a[i];原创 2013-11-09 20:56:16 · 1164 阅读 · 0 评论 -
打印奇数阶魔方阵(幻方阵)
所谓魔方阵是指这样的的方阵:它的每一行、每一列和对角线之和均相等。输入n,要求打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。例如,当n=3时,魔方阵为:8 1 63 5 74 9 2 此题要求输入一个数据n,然后打印出奇数阶魔方阵。要打印出奇数阶魔方阵,首先要明白奇数阶魔方阵的生成方法。其生成方法如下:(1) 第一个位置在第一行正中;原创 2013-11-10 17:47:54 · 4362 阅读 · 0 评论 -
C++堆排序
/**用自底向上算法,从给定的数组元素中构造一个堆*输入:一个可排序元素的数组H[1...n]*输出:一个堆H[1...n]*/int HeapBottom(int H[],int n){ int j,k,v;bool heap; for (int i = n/2; i >0; i--) { k=i;v=H[k]; heap=false; while (!heap&&2原创 2013-11-28 22:47:05 · 771 阅读 · 0 评论