用二分法查找整数时,要先对整数进行排序,同理在对字符串时也要进行排序,有关内容请参考:https://blog.csdn.net/weixin_44772948/article/details/103407807
对字符串排序好了之后,就可以用二分法进行查找了:代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define StringMax 100//定义每个字符串的最大长度
void ShowArray(char arr[][StringMax],int n)
{
for(int i=0;i<n;i++){
printf("%s\n",arr[i]);
}
}
void StringSort(char str[][StringMax],int n){
char tmp[100];
int i;
//简单冒泡排序
for(i = 0; i < n - 1; i++)
for(int j = 0; j < n - i - 1; j++)
{
if(strcmp(str[j], str[j + 1]) > 0) // 相当于前面的字符串减去后面的,具体见strcmp函数
{
strcpy(tmp, str[j]); // 使用函数strcpy
strcpy(str[j], str[j + 1]);
strcpy(str[j + 1],tmp);
}
}
}
//二分法查找字符串的位置
int HFind(char a[][StringMax],int n,char k[])//n为查找数组的最后一位元素的下标(等于数组长度-1),k为关键字,a为需要查找的数组
{
//int i;
int low,high;
low=0;
high=n;
int mid;
while(low<=high){
mid=(low+high)/2;
if(strcmp(a[mid],k)==0){
return mid;
}
else if(strcmp(a[mid],k)>0)
{
high=mid-1;
}else{
low=mid+1;
}
}
return -1;
}
void main(){
char a[][StringMax]={"tom","jack","yzb","naccy"};
ShowArray(a,4);
StringSort(a,4);
printf("排序后的字符串为:\n");
ShowArray(a,4);
char key[]="naccy";
int pos=HFind(a,3,key);//返回需要查找字符串的位置在数组中的下标
printf("%d\n",pos);
}
制作不易还请大家多多打赏