#include<stdio.h>
int main()
{
void f(char *[]);
int i;
char *str[5],a[5][15];
printf("enter strings\n");
for(i=0;i<5;i++)
str[i]=a[i];
for(i=0;i<5;i++)
scanf("%s",str[i]);
f(str);
for(i=0;i<5;i++)
printf("%s ",str[i]);
printf("\n");
return 0;
}
void f(char *p[])
{
int k,s;
char *n;
int cmp(char *q1,char *q2);
for(s=0;s<5;s++)
for(k=0;k<5-s;k++)
if(cmp(p[k],p[k+1])>0)
{
n=p[k];
p[k]=p[k+1];
p[k+1]=n;
}
}
int cmp(char *q1,char *q2)
{
int j=0;
for(;q1[j]!='\0'||q2[j]!='\0';j++)
if(q1[j]!=q2[j])
{
if(q1[j]>q2[j])
return 1;
return -1;
}
return 0;
}
如果你只是想让这个排序算法运行的话,只需要把S=0改为S=1就可以了,之前没有输出的原因是因为产生了数组越界,当s=0是,会比较到str[5]的值,所以就产生越界。
#include<stdio.h>
int main()
{
void f(char *[]);
int i;
char *str[5], a[5][15];
printf("enter strings\n");
for (i = 0; i < 5; i++)
str[i] = a[i];
for (i = 0; i < 5; i++)
scanf("%s", str[i]);
f(str);
for (i = 0; i < 5; i++)
printf("%s ", str[i]);
printf("\n");
return 0;
}
void f(char *p[])
{
int k, s;
char *n;
int cmp(char *q1, char *q2);
for (s = 1; s < 5; s++)
for (k = 0; k < 5 - s; k++)
if (cmp(p[k], p[k + 1]) > 0)
{
n = p[k];
p[k] = p[k + 1];
p[k + 1] = n;
}
}
int cmp(char *q1, char *q2)
{
int j = 0;
for (; q1[j] != '\0' || q2[j] != '\0'; j++)
if (q1[j] != q2[j])
{
if (q1[j] > q2[j])
return 1;
return -1;
}
return 0;
}