【1】随机生成一组数,用快速排序实现数组排序后,用您所想要的递归算法(二分思想)进行搜索,可否看得出快速排序与与该算法的有某处相同。
【2】好好研究快速排序算法,无论对递归的运用还是提高分析能力都有很大的受益。
#include "time.h"
#define MAX 20
void Initial(int a[]);
void QuickSort(int a[],int left, int right);
void Print(int a[]);
int Search(int a[],int x,int start, int end);
int main()
{
int a[MAX]={0};
Initial(a);
Print(a);
QuickSort(a,0,MAX-1);
printf("###After quick sort:###");
Print(a);
if (Search(a,10,0,MAX-1))
{
printf("\nfind");
}
else
{
printf("\nnot find");
}
return 0;
}
void Initial(int a[])
{
int i=0;
srand( (unsigned)time(NULL));
for (i=0; i<MAX; i++)
{
a[i] = rand()%MAX;
}
}
void QuickSort(int a[],int l, int r)
{
int left=l,right=r;
if (left>=right)
{
return ;
}
int temp = a[left];
while (left<right)
{
//从右边开始找一个小于temp的数,找到或left>=right为止
while (a[right]>=temp && left<right)
{
right--;
}
if (left<right)
{
a[left]=a[right];
left++;
}
//从左边开始找一个大于temp的数,找到或left>=right为止
while(a[left]<=temp && left<right)
{
left++;
}
if (left<right)
{
a[right]=a[left];
right--;
}
}
a[left] = temp;
QuickSort(a,l,left-1);
QuickSort(a,left+1,r);
}
void Print(int a[])
{
int i=0;
for (i=0; i<MAX; i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
//这是你所需要的递归算法,对有序表搜索。
int Search(int a[],int x,int start, int end)
{
if (start>end)
{
return 0;
}
int mid=(start+end)/2;
if (x == a[mid])
{
return 1;
}
if (x>a[mid])
{
Search(a,x,mid+1,end);
}
else if (x<a[mid])
{
Search(a,x,start,mid-1);
}
}
-------------------------
顺序搜索要用递归么。。。·····对有序表的话用二分就行了········
递归的话适用于数列····
a(n)=a(n-1)+a(n-2)
这种,数列元素直接有一定联系的才行·····,有序表···用递归的话···我唯一能想到的就是
int f(int n,int i){
int a;
if(a[i]==n)
return i;
else{
a=f(n,i+1);
return a;
}
}
main(){
~
f(n,0)
~
}
大概就这样了··从0号元素搜索···不是就下一号········,其他的我就想不出如何用递归搜索有序表了·······