问题描述:
在主函数中输入10个长度为10的字符串,用另一个函数对他们排序,然后再主函数输出这10个已排好序的字符串。(运用指针)
方法一:
运用冒泡排序
#include<stdio.h>
void sort(char * p,int n);
void main()
{
char a[10];
int i;
printf("Input 10 strings:\n");
gets(a);
sort(a,10);
for(i=0;i<10;i++)
printf("%2c",a[i]);
{
char a[10];
int i;
printf("Input 10 strings:\n");
gets(a);
sort(a,10);
for(i=0;i<10;i++)
printf("%2c",a[i]);
}
void sort(char *p,int n)
{
int i,j;
{
int i,j;
char k;
for(j=1;j<=10-1;j++)
for(i = 0;i<=10-j;i++)
if(p[i] > p[i+1])
{
k = p[i];
p[i] = p[i+1];
p[i+1] = k;
}
for(j=1;j<=10-1;j++)
for(i = 0;i<=10-j;i++)
if(p[i] > p[i+1])
{
k = p[i];
p[i] = p[i+1];
p[i+1] = k;
}
}
方法二:
运用选择法(擂台法)
#include<stdio.h>
void sort(char *,int);
void sort(char *,int);
void main()
{
char a[10];
int i;
gets(a);
sort(a,10);
for(i = 0;i<10;i++)
printf("%4c",a[i]);
}
{
char a[10];
int i;
gets(a);
sort(a,10);
for(i = 0;i<10;i++)
printf("%4c",a[i]);
}
void sort(char *p, int n)
{
int i,j,k,t;
for(i = 0;i<n-1;i++)
{
k = i;
for(j = i+1;j<n;j++)
if(p[j] > p[k]) k=j;
if(k != i)
{
t = p[i];
p[i] = p[k];
p[k] = t;
}
}
}
{
int i,j,k,t;
for(i = 0;i<n-1;i++)
{
k = i;
for(j = i+1;j<n;j++)
if(p[j] > p[k]) k=j;
if(k != i)
{
t = p[i];
p[i] = p[k];
p[k] = t;
}
}
}
方法三:
运用指针数组 和 选择法
#include<stdio.h>
#include<string.h>
#include<string.h>
void sort(char *p[],int n);
int main()
{
int i;
char *p[10],str[10][10];
for(i = 0;i<10;i++)
{
scanf("%s",str[i]); /* 输入时以空格为一个字符串的结束 */
p[i] = str[i]; /* 将第i个字符串的首地址赋给指针数组p的第i个元素 */
}
sort(p,10);
printf("Now,the sequence is :\n");
for(i = 0;i<10;i++)
printf("%s\n",p[i]);
return 0;
{
int i;
char *p[10],str[10][10];
for(i = 0;i<10;i++)
{
scanf("%s",str[i]); /* 输入时以空格为一个字符串的结束 */
p[i] = str[i]; /* 将第i个字符串的首地址赋给指针数组p的第i个元素 */
}
sort(p,10);
printf("Now,the sequence is :\n");
for(i = 0;i<10;i++)
printf("%s\n",p[i]);
return 0;
}
void sort(char *p[], int n)
{
int i,j,k;
char temp[10];
for(i = 0;i<n-1;i++)
{
k = i;
for(j = i+1;j<n;j++)
if(strcmp(p[j],p[k]) < 0)
k = j;
if(k != i)
{
strcpy(temp,p[i]);
strcpy(p[i],p[k]);
strcpy(p[k],temp);
}
}
}
{
int i,j,k;
char temp[10];
for(i = 0;i<n-1;i++)
{
k = i;
for(j = i+1;j<n;j++)
if(strcmp(p[j],p[k]) < 0)
k = j;
if(k != i)
{
strcpy(temp,p[i]);
strcpy(p[i],p[k]);
strcpy(p[k],temp);
}
}
}