关于用选择法对字符串排序的问题,恳请解疑。
代码如下。是从文件读入3个字符串,给予排序,并将结果输入磁盘。#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{ FILE *fp;
char str[3][10],temp[10]; // str是用来存放字符串的二维数组,temp是临时数组
int i,j,k,n=3;
printf("Enter strings:\n"); // 提示输入字符串 */
for(i=0;i<n;i++)
gets(str[i]); // 输入字符串
for(i=0;i<n-1;i++) // 用选择法对字符串排序
{k=i;
for(j=i+1;j<n;j++)
if(strcmp(str[k],str[j])>0) k=j;
if(k!=i)
{strcpy(temp,str[i]);
strcpy(str[i],str[k]);
strcpy(str[k],temp);
}
}
if((fp=fopen("D:\\CC\\string.dat","w"))==NULL) // 打开磁盘文件
{
printf("can't open file!\n");
exit(0);
}
printf("\nThe new sequence:\n");
for(i=0;i<n;i++)
{fputs(str[i],fp);fputs("\n",fp);
printf("%s\n",str[i]); // 在屏幕上显示字符串
}
return 0;
}
我的疑问是:在用选择法排序时,为什么要定义个k?它的作用是什么?
我做如下改动可以么?
.......
for(i=0;i<n-1;i++) // 用选择法对字符串排序
{
for(j=i+1;j<n;j++)
if(strcmp(str[i],str[j])>0)
{strcpy(temp,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],temp);
}
...........