//计算N!的递归 int Factorial(){ if(n<=1) return 1; else return n*Factorial(n-1); } //累加a[0:n-1] template<class T> T sum(T a[],int n){ T tsum =0; for(int i=0;i<n;i++){ tsum += a[i]; } return tsum; } //递归计算a[0:n-1] template<class T> T Rsum(T a[],int n){ if(n>0) return Rsum(a,n-1) +a[n-1]; return 0; } //使用递归生成排列,这段代码输出所有前缀为list[0:k-1],后缀为list[k:m]的排列方式 template<class T> void Perm(T list[],int k,int m){ int i; if(k==m){ for{i=0;i<=m;i++} cout<<list[i]; cout<<endl; } else for(i=k;i<=m;i++){ Swap(list[k],list[i]); Perm(list,k+1,m); Swap(list[k],list[i]); } } template<class T> inline void Swap(T& a, T& b){ T temp =a; a =b; b =temp; } //创建一个二维数组但不处理异常 template<class T> void Make2DArray(T** &x ,int rows,int cols){ x = new T* [rows]; for(int i=0;i < rows; i++) x[i]=new int [cols]; } //寻找最大元素 template<class T> int Max(T a[],int n){ int pos=0; for(int i=1;i<n,i++){ if(a[pos]<a[i]) pos=i; } return pos; } //选择排序 template<class T> void SelectionSort(T a[],int n){ for(int size=n;size>1;size--){ int j=Max(a,size); Swap(a[j],a[size-1]); } } //及时终止的选择排序 template<class T> void SelectionSort(T a[],int n){ bool sorted = false; for(int size=n;!sort && size>1;size--){ int pos=0; for(int i=1;i<n,i++){ if(a[pos]<a[i]) pos=i; else sorted = true; } Swap(a[j],a[size-1]); } } //顺序搜索 template<class T> int SequentialSearch(T a[],const T& x,int n){ int i=0; for(i=0;i<n && i!=x;i++); if(i==n) return -1; return i; } //一次冒泡 template<class T> void Bubble(T a[],int n){ for(int i=0;i<n-1;i++) if(a[i]>a[i+1]) Swap(a[i],a[i+1]); } //冒泡排序 template<class T> void BubbleSort(T a[],int n){ for(int i=n;n>1;i--) Bubble(a,i); } void BubbleSort(int* pData, int count) { int temp; for (int i = 1; i < count; i++) { for (int j = count - 1; j >= i; j--) { if (pData[j] < pData[j - 1]) { temp = pData[j - 1]; pData[j - 1] = pData[j]; pData[j] = temp; } } } } //及时终止的冒泡排序 template<class T> bool Bubble(T a[],int n){ bool swaped = false; for(int i=0;i<n-1;i++) if(a[i]>a[i+1]){ Swap(a[i],a[i+1]); swaped = true; } return swaped; } template<class T> void BubbleSort(T a[],int n){ for(int i=n;n>1 && Bubble(a,i);i--) } //向一个有序数组a中插入元素x template<class T> void Insert(T a[],int& n,const T& x){ int i; for(i=n-1; i>=0&& x<a[i];i--) a[i+1]=a[i]; a[i+1]=x; n++; } //插入排序 template<class T> void Insert(T a[],int& n,const T& x){ int i; for(i=n-1; i>=0&& x<a[i];i--) a[i+1]=a[i]; a[i+1]=x; } template<class T> void InsertSort(T a[],int n,){ for(i=1; i<n;i++){ T t=a[i]; Insert(a,i,t); } } //另一种插入排序 template<class T> void Insert(T a[],int& n,const T& x){ } template<class T> void InsertSort(T a[],int n,){ for(i=1; i<n;i++){ T t=a[i]; int j; for(j=n-1; j>=0&& x<a[j];j--) a[j+1]=a[j]; a[j+1]=x; } }