正在加载图片...
char *binary (char *sp, char *s, int n) 其中的三个参数含义是: (1)sp:指针,它指向备查的多个串的指针数组 (2)s:指针,它指向要查找的串 (3)n:备查串的个数 算法分析:二分法查找又称为折半查找,它的基本思想是:反复的将数组分为两部分, 然后在可能包含目标值的那部分中进行查找。由于二分法查找的前提是要求被查找对象是已 经排好序的,因此,如果这个前提已经成立,算法就很简单。已知备查的n个字符串存储于 个指针数组中,下面是它的一个实现方案 char *binary(char spo, char *s, int n) int low =0, high, mid high = n-1 while(low < higt) mid =(low+ high)/2 if( strcmp(s,sp[mid])<0)/*如果s<sp[mid], strcmp返回负数*/ high d-1 f( strcmp(s,sp[mid])>0)/*如果s>sp[mid], strcmp返回正数*/ else return sp[mid];/*目标已经找到*/ return 0 8.16用递归法求解: m=0,n> g(m-1,2n)+n 算法分析:由于递归式已经显式给出,递归结束的条件为m=0,于是可以直接写出它 的递归函数。下面用一个完整的程序验证该函数的正确性 #include<stdio. h> nt g(int m, int n) if(m = 0) return 0: else return g(m-1, 2*n)+n int maino int m, n, val printf("Input m and n:") scanf(%d%",&m, &n)5 char *binary(char *sp[],char *s,int n); 其中的三个参数含义是: (1)sp:指针,它指向备查的多个串的指针数组 (2)s: 指针,它指向要查找的串 (3)n: 备查串的个数 算法分析:二分法查找又称为折半查找,它的基本思想是:反复的将数组分为两部分, 然后在可能包含目标值的那部分中进行查找。由于二分法查找的前提是要求被查找对象是已 经排好序的,因此,如果这个前提已经成立,算法就很简单。已知备查的 n 个字符串存储于 一个指针数组中,下面是它的一个实现方案。 char *binary(char *sp[],char *s,int n) { int low = 0,high,mid; high = n-1; while(low <= higt) { mid = (low + high) / 2; if( strcmp(s,sp[mid]) < 0 ) /* 如果 s<sp[mid],strcmp 返回负数 */ high = mid-1; else if(strcmp(s,sp[mid]) > 0) /* 如果 s>sp[mid],strcmp 返回正数 */ low=mid+1; else return sp[mid]; /* 目标已经找到 */ } return 0; } 8.16 用递归法求解: 0 m=0,n>=0 g(m,n)= g(m-1,2n)+n m>0,n>=0 算法分析:由于递归式已经显式给出,递归结束的条件为 m = 0,于是可以直接写出它 的递归函数。下面用一个完整的程序验证该函数的正确性。 #include<stdio.h> int g(int m,int n) { if(m == 0) return 0; else return g(m-1,2*n)+n; } int main() { int m,n,val; printf( "Input m and n: " ); scanf("%d%d",&m,&n); val = g(m,n);
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有