字符串排序的优化

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;
}

猜你喜欢

转载自blog.csdn.net/qq_43496435/article/details/113801490