数据结构算法 (一)

//计算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;
	}
}





你可能感兴趣的:(数据结构算法 (一))