1、字符数组的选择排序
#include<stdio.h>
#include"string.h"
int main()
{
int n;
printf("input a num:");
scanf("%d",&n);
char s1[n][20];
getchar();
int i,j;
char t[20];
for(i=0;i<n;++i)
{
gets(s1[i]);
}
for(i=0;i<n-1;++i)
{
for(j=i+1;j<n;++j)
{
if(strcmp(s1[i],s1[j])>0)
{
strcpy(t,s1[i]);
strcpy(s1[i],s1[j]);
strcpy(s1[j],t);
}
}
}
for(i=0;i<n;++i)
{
puts(s1[i]);
}
return 0;
2、字符数组的插入排序
#include<stdio.h>
#include"string.h"
int main(void)
{
int n,i,j;
printf("input a number:");
scanf("%d",&n);
char a[n][20];
char t[20];
getchar();
for(i=0;i<n;++i)
{
gets(a[i]);
}
for(i=0;i<n;++i)
{
strcpy(t,a[i]);
while(strcmp(t,a[i-1])<0&&i>0)
{
strcpy(a[i],a[i-1]);
--i;
}
strcpy(a[i],t);
}
printf("output:\n");
for(i=0;i<n;++i)
{
puts(a[i]);
}
return 0;
}
3、字符数组的冒泡加二分法查找
#include<stdio.h>
#include"string.h"
int main()
{
int i=0;
int n,j;
printf("input a num");
scanf("%d",&n);
char s[n][10];
char s1[10];
getchar();
for(i=0;i<n;++i)
{
gets(s[i]);
}
for(i=1;i<n-1;i++)
{ for(j=0;j<n-j;++j)
{
if(strcmp(s[j],s[j+1])>0)
{
strcpy(s1,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],s1);
}
}
}
for(i=0;i<n;++i)
{
puts(s[i]);
}
char s2[20];
printf("input you want find:");
gets(s2);
int end=n-1;
int begin=0;
int mid;
while(strcmp(s[begin],s[end])<=0)
{
mid=(begin+end)/2;
if(strcmp(s2,s[mid])>0)
{
begin=mid+1;
}
else if(strcmp(s2,s[mid])<0)
{
end=mid-1;
}
else
{
break;
}
}
if(begin <= end)
{
printf("%s I have find\n",s2);
}
else
{
printf("%sI don not have find\n",s2);
}
return 0;
}