1. 程式人生 > 其它 >字串排序的優化

字串排序的優化

技術標籤:# 演算法題

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