对char s[5][10] = { "hi","hello","world","baby","ada" }进行排序
直接交换字符数组,修改内存内容的时间很长:如果一个字符串100B,那交换一次,就要修改大小为100B的内存两次,效率很低。
而如果交换的是字符串的指针,则效率很高,因为指针大小固定为4B,交换一次,总共只修改了8B内存
int main()//数组指针的解法:低效
{
char s[5][10] = { "hi","hello","world","baby","ada" };
//冒泡排序
for (int i = 0; i < 4; i++)
{
for (int j = 4; j > i; j--)
{
if (strcmp(s[j] , s[j - 1]) < 0)
{
char t[10] = { 0 };
strcpy(t , s[j - 1]);
strcpy(s[j - 1] , s[j]);
strcpy(s[j] , t);
}
}
}
for (int i = 0; i < 5; i++)
{
printf("%s\n" , s[i]);
}
return 0;
}
int main()//指针数组的解法:高效
{
char s[5][10] = { "hi","hello","world","baby","ada" };
char *p[5] = { 0 };//存放排好序的字符指针,p是二级指针(char**)
for (int i = 0; i < 5; i++)
{
p[i] = s[i];
}
//冒泡排序
for (int i = 0; i < 4; i++)
{
for (int j = 4; j > i; j--)
{
if (strcmp(p[j] , p[j - 1]) < 0)
{
char *t = p[j];
p[j] = p[j - 1];
p[j - 1] = t;
}
}
}
for (int i = 0; i < 5; i++)
{
printf("%s\n" , p[i]);
}
return 0;
}