/* 编写递归算法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 ",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<right) { while(left<right&&a[left]%2==1) //左边找偶数 left++; while(left<right&&a[right]%2==0) //右边找奇数 right--; if(left<right) //左右交换 { 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<n-1;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("请输入要查找的数: "); scanf("%d",&x); pos=binSearch(a,0,N-1,x); if (pos!=-1) printf("a[%d]=%d ",pos,x); else printf("Not found! "); 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 ",p->info); else printf("链表为空 "); return 0; }