算法設計:
(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]);
}