算法設計:
(1) 定義壹個二維字符數組,用以存儲N名學生的姓名
char name[N][13];
(2) 用選擇排序方法,對N個字符串,用比較函數strcmp( ) 排序
(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趟,從余下的N-i+1(i=1,2,...,N-1)個記錄中選擇關鍵字值最小的記錄作為第i個記錄(i=1,2,3,…,N-2).
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個壹維字符數組:
name[0], name[1], name[2], …, name[N-1].
在選擇排序程序段中,將兩數比較語句:
if(a[j]更改為: if(strcmp(name[j],name[k])<0)k=j;
而數據交換語句:{t=a[k]; a[k]=a[i];a[i]=t;}
更改為: {strcpy(t,name[k]);strcpy( name[k],namea[i]);strcpy(name[i],t);}
完整的程序清單
#include "stdio.h"
#include "string.h"
main()
{cahr name[10][13],temp[13]; int i;
for(i=0;i<10;i++){
printf("請輸入第%d名學生的姓名:\n",i+1);
gets(name[i]);
}
for(i=0;i<9;i++)
{k=i;
for(j=i+1;j<10;j++)if(strcmp(name[j],name[k])<0)k=j;
if(k!=i){strcpy(temp,name[k]);
strcpy(name[k],name[i]);strcpy(name[i],temp);
}
}
printf("10名學生的姓名按字典排列結果:\n");
for(i=0;i<10;i++)printf("\n %s",name[i]);
}