冒泡法排序及二分法查找的递归使用
代码块
#include <stdio.h>
#include <math.h>
#define MAX_SIZE 1000
#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))
void sort(int [],int);
int binsearch(int list[],int searchnum,int left,int right);
void main(void)
{
int i, n,searchnum;
int list[MAX_SIZE];
printf("Enter the number of numbers to generate: ");
scanf("%d",&n);
for(i = 0; i<n; i++){
list[i] = rand() % 1000;
printf("%d ",list[i]);
}
sort(list,n);
printf("\n Sorted array:\n ");
for(i = 0; i<n; i++){
printf("%d ",list[i]);
}
printf("\n");
printf("Enter the number you search: ");
scanf("%d",&searchnum);
printf("the number you enter is: %d\n",searchnum);
i = binsearch(list,searchnum,0,n-1);
if(i!=-1)
{
printf("The number position is: %d\n",i);
}
else
printf("The number is not in the array\n");
return 0;
}
void sort(int list[],int n){
int i,j,min,temp;
for(i=0;i<n-1;i++)
{
min = i;
for(j = i+1;j<n;j++)
{
if(list[j] < list[min])
min = j;
}
SWAP(list[i],list[min],temp);
}
}
int binsearch(int list[],int searchnum,int left,int right)
{
int middle,position;
position = -1;
if(left <= right)
{
middle = (left + right)/2;
if(list[middle] == searchnum)
{
position = middle;
printf("position is: %d\n",position);
return position;
}
else if(list[middle] < searchnum)
{
position = binsearch(list,searchnum,middle+1,right);
}
else
{
position = binsearch(list,searchnum,left,middle-1);
}
}
return position;
}