文档库 最新最全的文档下载
当前位置:文档库 › C语言算法锦集(六) 数组常用操作

C语言算法锦集(六) 数组常用操作

C语言算法锦集(六) 数组常用操作
C语言算法锦集(六) 数组常用操作

数组常用算法:

查找:

/*线性查找*/

int find(int num,int x[],int key)

{ int i,m=-1;

for(i=0;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

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

#include

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

t=a[i];

for(j=i-1;j>=0&&t

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]

c[k++]=a[i];i++;}

else{

c[k++]=b[j];j++;}

}

if(i

c[k++]=a[i];

if(j

c[k++]=a[j]; }

/*交换法排序1 冒泡排序*/

void sort(int a[],int n)

{ int i,j,t,flag;

for(i=0;i

flag=1;

for(j=0;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

for(j=i+1;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

point=i;

for(j=i+1;j

if(a[point]

if(point!=i){

t=a[point];

a[point]=a[i];

a[i]=t;

}

}

}

相关文档