/*

编写递归算法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;

}

 

精彩链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。