数组常用算法:
查找:
/*线性查找*/
int find(int num,int x[],int key)
{ int i,m=-1;
for(i=0;i<num;i++)
if(x[i]==key){
m=i;
break;
}
return m;
}
/*折半查找*/
int find(int x[],int num,int key)
{ int m=-1,low=0,high=num-1,mid;
while(low<=high){
mid=(low+high)/2;
if(x[mid]==key){
m=mid;
break;
}
else if(x[mid]>key) high=mid-1;
else low=mid+1;
}
return m;
}
/*折半查找(递归)*/
int b_search(int x[ ],int low,int high,int key) {
int mid;
mid=(low+high)/2;
if(x[mid]==key) return mid;
if(low>=high) return -1;
else if(key<x[mid])
return b_search(x,low,mid-1,key);
else
return b_search(x,mid+1,high,key); }
/*寻找子串*/
int find(char *s1,char *s2)
{ int i,k=0;
while(s1[i]==s2[i]) i++;
if(s2[i]==0) return k;
s1++;
k++;
return -1;
}
分词:
/*方法一*/
void fen(char s[][10],char str) { int i,j,k;
for(i=0,j=0,k=0;str[i]!=0;i++)
if(isalpha(a[i]))
s[j][k++]=str[i];
else {
s[j][k]=0;
k=0;
j++;
}
}
}
/*方法二*/
#include<stdio.h>
#include<string.h>
void main()
{ int i=0,n=0;char s[80],*p;
strcpy(s,"It is a book.");
for(p=s;p!='\0';p++)
if(*p=='')
i=0;
else
if(i==0)
{n++;i=1;}
printf("%d\n",n);
getch();
}
排序:
/*插入法排序*/
void sort(int a[],int n)
{ int i,j,t;
for(i=1;i<n;i++){
t=a[i];
for(j=i-1;j>=0&&t<a[j];j--)
a[j+1]=a[j];
a[j]=t;
}
}
/*归并排序*/
#define x 10
#define y 10
void com(int *a,int *b,int *c)
{ int i,j,k;
for(i=0,j=0,k=0;i<=x&&j<=y;){
if(a[i]<b[j]){
c[k++]=a[i];i++;}
else{
c[k++]=b[j];j++;}
}
if(i<x) for(k=k-1;i<x;i++)
c[k++]=a[i];
if(j<x) for(k=k-1;j<y;j++)
c[k++]=a[j]; }
/*交换法排序1 冒泡排序*/
void sort(int a[],int n)
{ int i,j,t,flag;
for(i=0;i<n-1;i++){
flag=1;
for(j=0;j<n-1-i;j++)
if(a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
flag=0;
}
if(flag) break;
}
}
/*交换法排序2*/
void sort(int a[],int n)
{ int i,j,t;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
/*选择法排序*/
void sort(int a[],int n)
{ int i,j,point,t;
for(i=0;i<n-1;i++){
point=i;
for(j=i+1;j<n;j++)
if(a[point]<a[j]) point=j;
if(point!=i){
t=a[point];
a[point]=a[i];
a[i]=t;
}
}
}。