/*2.交换最小元素和a[i]*/
if(k!
=i){交换a[k]a[i]}
}
}
3.冒泡排序/*相邻比较*/
voidbubble_sort(inta[],intn)
{inti,j,t,noswap;
for(i=0;i{noswap=1;
for(j=0;j<=n-2-i;j++)
if(a[j]>a[j+1])
{交换;noswap=0;}
if(noswap)break;
}
}
归并
intfun(inta[],intna,intb[],intnb,intc[])
{inti=0,j=0,k=0;
while(i{if(a[i]
elseif(a[i]>b[j])
c[k++]=b[j++];
else{c[k++]=a[i++];j++;}
}
while(iwhile(jreturnk;
}
二维数组
上三角for(i=0;ifor(j=i;j下三角for(i=0;ifor(j=0;j<=i;j++)
转置
voidfun(inta[][N])
{inti,j,t;
for(i=0;ifor(j=i;j{交换a[i][j]a[j][i]}
}
最值
字符串和字符数组
1)strlen(str)注意和sizeof(str)比较
intlength(char*str)
{intn=0;
while(*str){n++;str++;}
returnn;
}
intlength(char*str)
{char*ps=str;
while(*ps){ps++;}
returnps-str;
}
2)strcpy(str1,str2)
char*copy(char*s1,char*s2)
{inti=0;
while(s2[i])
{s1[i]=s2[i];i++;}
s1[i]=0;
returns1;
}
3)strcat(str1,str2)
char*cat(char*s1,char*s2)
{inti=0,j=0;
/*先找到s1中0的位置*/
while(s1[i])i++;
/*然后再将s2从此处拷贝*/
while(s2[j])s1[i++]=s2[j++];
s1[i]=0;
returns1;
}
4)strcmp(str1,str2)
intcmp(char*s1,char*s2)
{inti=0;
while(s1[i]==s2[i]&&s1[i]&&s2[i])i++;
returns1[i]-s2[i];
}
字符串算法
1.多个字符串排序
voidsort(chara[][20],intn)
{inti,j;chart[20];
for(i=0;ifor(j=i+1;jif(strcmp(a[i],a[j])>0)
{strcpy(t,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],t);
}
}
2.字符串模式匹配
intfind(char*s,char*t)
{inti=0,j=0;
while(s[i]&&t[j])
if(s[i]==t[j])i++,j++;
elsei=i-j+1,j=0;
if(!
t[j])returni-j;返回下标
elsereturn-1;
}
3.统计单词个数
intcount(char*s)
{inti=0,n=0,flag=1;
while(s[i])
{if(isalpha(s[i]))
{if(flag==1)n++,flag=0;}
elseflag=1;
i++;
}
returnn;
}
统计整数的个数
intcount(char*s,int*a)
{inti=0,j=-1,n=0,flag=1;
while(s[i])
{if(isdigit(s[i]))
{if(flag==1)
{j++;b[j]=s[i]-‘0’;
flag=0;}
elseb[j]=b[j]*10+s[i]-‘0’;}
elseflag=1;
i++;
}
returnj+1;
}
main()
{inta=3,b=4;
swap(&a,&b);
printf(“a=%d,b=%d”,a,b);
}
voidswap(int*x,inty)
{int*t;
t=x,x=y,y=t;}
voidswap(int*x,inty)
{int*t;
*t=*x,*x=*y,*y=*t;}错
voidswap(int*x,inty)
{intt;
t=*x,*x=*y,*y=t;}
intsub(intx)
{if(x==0)return3;
elsereturnsub(x/10)*2;
}
main()
{printf(“%d”,sub(123));
}