算法設計:
(1)定義壹個二維字符數組來存儲n名學生的姓名。
字符名稱【N】【13】;
(2)使用選擇性排序方法,通過比較函數strcmp()對N個字符串進行排序。
③輸出結果
選擇性分類思想
(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);
get(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】);
}