/*
编写递归算法int max(int a[],int left, int right),求数组a[left..right]中的最大数。
*/
#include "ArrayIo.h"
/*请将本函数补充完整,并进行测试*/
int max(int a[],int left,int right)
{
int mid,lmax,rmax;
if(left==right)
return a[left];
else
{
mid=(left+right)/2;
lmax=max(a,left,mid);
rmax=max(a,mid+1,right);
return lmax>rmax?lmax:rmax;
}
}
int main()
{ int a[10];
input(a,10);
print(a,10);
printf("数组的最大数是:%d\n",max(a,0,9));
return 0;
}
/*
请编写一个递归算法函数void partion(int a[], int left, int right),
将数组a[left..right]中的所有奇数调整到表的左边,所有偶数调整到表的右边。
*/
#include "ArrayIo.h"
#define N 10
/*请将本函数补充完整,并进行测试*/
void partion(int a[], int left,int right)
{
int temp;
while(left { while(left left++; while(left right--; if(left { temp=a[left]; a[left]=a[right]; a[right]=temp; partion(a,left+1,right-1); } } } int main() { int a[N]; init(a,N); /*随机产生N个数*/ print(a,N); partion(a,0,N-1); print(a,N); return 0; } /* 请编写递归函数void bubbleSort(int a[],int n), 对长度为n的数组采用冒泡法进行升序排序。 请编写递归函数int binSearch(int a[], int left, int right,int key), 采用二分查找法在数组a[left..right]中查找值为key的元素所在的位置, 若查找失败函数返回-1。 */ #include "ArrayIo.h" #define N 10 /*请将本函数补充完整,并进行测试*/ void bubbleSort(int a[],int n) { int i,temp,flag; if(n>1) { flag=0; for(i=0;i { if(a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1; } } bubbleSort(a,n-1); } } int binSearch(int a[], int left,int right,int key) { int mid; if(left>right) return -1; else { mid=(left+right)/2; if(a[mid]==key) return mid; else if(a[mid]>key) binSearch(a,left,mid-1,key); else binSearch(a,mid+1,right,key); } } int main() { int x,pos,a[N]; init(a,N); bubbleSort(a,N); print(a,N); printf("请输入要查找的数:\n"); scanf("%d",&x); pos=binSearch(a,0,N-1,x); if (pos!=-1) printf("a[%d]=%d\n",pos,x); else printf("Not found!\n"); return 0; } /* 已知带头结点的单链表结构定义同实验3,假设链表中所有结点值均不相同, 请编写一个递归函数linklist max(linklist head),返回表中最大数所在的结点地址,若链表为空,返回NULL。 */ #include "slnklist.h" /*请将本函数补充完整,并进行测试*/ linklist max(linklist head) { linklist p,q; if(!head->next) return NULL; else if(!head->next->next) return head->next; else { p=max(head->next); if(head->next->info > p->info) return head->next; return p; } } int main() { linklist head,p; head=creatbyqueue(); print(head); p=max(head); if (p) printf("max=%d\n",p->info); else printf("链表为空\n"); return 0; } 精彩链接
发表评论