c算法真题
算法设计:
(1)定义一个二维字符数组来存储n个学生的名字。
字符名称[N][13];
(2)使用选择性排序方法,通过比较函数strcmp()对N个字符串进行排序。
(3)输出结果
选择性排序思想
(1)第一遍,从n条记录中选择关键字值最小的记录作为第一条记录;
k = 0;
for(j = 0+1;j if(k!= 0){ t = a[k];a[k]= a[I];a[I]= t;}/*单元K和单元0的交换*/
(2)在第二遍中,从剩余的N-1条记录中选择具有最小关键字值的记录作为第二条记录;
k = 1;
for(j = 1+1;j if(k!= 1){ t = a[k];a[k]= a[I];a[I]= t;}
(3)一般在第I遍中,选择关键字值最小的记录作为第I条记录(I = 1,2,...,n-1)从剩余的n-I+1。
k = I-1;
for(j = I;j if(k!= 1){ t = a[k];a[k]= a[I];a[I]= t;}
对于n个元素的数组A,用C语言选择排序的程序段是:
for(I = 0;i { k = i
for(j = I+1;j if(k!= I){ t = a[k];a[k]= a[I];a[I]= t;}
}
完全类似,我们把二维字符数组char name[N][13]看成N个一维字符数组:
姓名[0],姓名[1],姓名[2],…,姓名[N-1]。
在选择排序程序部分,比较两个数字:
If(a[j]改为:if (strcmp (name [j],name [k])
以及数据交换语句:{ t = a[k];a[k]= a[I];a[I]= t;}
更改为:{strcpy(t,name[k]);strcpy( name[k],namea[I]);strcpy(name[i],t);}
完整的程序列表
#包含“stdio.h”
#包含" string.h "
主()
{cahr name[10][13],temp[13];int I;
for(I = 0;我& lt10;i++){
Printf("请输入%d学生的姓名:\n ",I+1);
获取(name[I]);
}
for(I = 0;我& lt9;i++)
{ k = I;
for(j = I+1;j & lt10;j++)if(strcmp(name[j],name[k])& lt;0)k = j;
如果(k!=i){strcpy(temp,name[k]);
strcpy(name[k],name[I]);strcpy(name[i],temp);
}
}
printf(" 10学生姓名按字典排列:\ n ");
for(I = 0;我& lt10;i++)printf("\n %s ",name[I]);
}