一、演算法設計:
1、輸入10個字串;
2、任選一種排序演算法對字串排序,比較時需要使用strcmp, 複製時需要使用strcpy。
3、輸出排序後的結果。
二、演算法最佳化:
字串比較必須使用strcmp,這一點無法最佳化。 但每次將字串整體複製,交換值,效率偏低,所以可以使用字元指標陣列儲存每個字串的地址,排序時交換指標即可。
另外,輸入時可以同步完成排序操作。
三、參考程式碼:
#include <stdio.h>
#include <string.h>
int main()
{
char a[10][100];//10個字串空間,每個最長限制為100個位元組。
char *p[10];//字元指標陣列。
int i,j;
char *t;
for(i = 0; i < 10; i ++)
scanf("%s",a[i]);//輸入第i個字串。
t=a[i];
for(j = i-1; j>=0; j--)//查詢插入的位置。
if(strcmp(p[j], t)<=0) break;//從小到大按字典序排序。
else p[j+1]=p[j];//後移一位。
p[j+1] = t;//插入。
}
//迴圈結束後,p中就是排序好的10個字串。
printf("%s\n", p[i]);
}//輸出結果。
return 0;
一、演算法設計:
1、輸入10個字串;
2、任選一種排序演算法對字串排序,比較時需要使用strcmp, 複製時需要使用strcpy。
3、輸出排序後的結果。
二、演算法最佳化:
字串比較必須使用strcmp,這一點無法最佳化。 但每次將字串整體複製,交換值,效率偏低,所以可以使用字元指標陣列儲存每個字串的地址,排序時交換指標即可。
另外,輸入時可以同步完成排序操作。
三、參考程式碼:
#include <stdio.h>
#include <string.h>
int main()
{
char a[10][100];//10個字串空間,每個最長限制為100個位元組。
char *p[10];//字元指標陣列。
int i,j;
char *t;
for(i = 0; i < 10; i ++)
{
scanf("%s",a[i]);//輸入第i個字串。
t=a[i];
for(j = i-1; j>=0; j--)//查詢插入的位置。
if(strcmp(p[j], t)<=0) break;//從小到大按字典序排序。
else p[j+1]=p[j];//後移一位。
p[j+1] = t;//插入。
}
//迴圈結束後,p中就是排序好的10個字串。
for(i = 0; i < 10; i ++)
{
printf("%s\n", p[i]);
}//輸出結果。
return 0;