5个字符串的升序排列,能不能讲一下代码思路

#include <stdio.h>
#include <string.h>
void cmp(char s[8],char t[80]);
void cpy(char a[80],char b[80]);
int main()
{
	char s[5][80];
	int i,j;
	char *p[5];
	for(i=0;i<5;i++)
		p[i]=s[i];
	printf("Input 5 strings:\n");
	for(i=0;i<5;i++)
		gets(p[i]);
	for(i=0;i<5;i++)
	{
		for(j=i+1;j<5;j++)
		{
			cmp(p[i],p[j]);
		}
	}
	printf("---------------------------\n");
	for(i=0;i<5;i++)
		puts(p[i]);
}

void cmp(char s[8],char t[80])
{
	char string[80];
	int i=0;
	for(i=0;i<80&&t[i];i++)
		if(s[i]>t[i])
		{
			cpy(string,s);
			cpy(s,t);
			cpy(t,string);
			break;
		}

		else if (s[i]<t[i])	break;

}

void cpy(char a[80],char b[80])
{
	int i;
	for(i=0;b[i]!='\0'&&i<80;i++)
		a[i]=b[i];
		a[i]='\0';
}

 

这是一段冒泡排序思想的代码。

代码首先读取了5个字符串,接下来使用冒泡排序的方法。

其实这段代码的冒泡部分应该进行一下修改,修改为。

	for(i=0;i<4;i++)
	{
		for(j=0;j<5-i-1;j++)
		{
			cmp(p[j],p[j+1]);
		}
	}

从第一个开始,依次比较p[0], p[1]; p[1],p[2]; p[2], p[3]; p[3], p[4],让字符串比较大的那一串升到5个字符串的最末尾端。

接下来,依次比较p[0], p[1]; p[1],p[2]; p[2], p[3];让前四个最大的,一路过关斩将升到第4个字符串的位置。

接下来,依次比较p[0], p[1]; p[1],p[2]; 让前三个里面最大的,一路过关斩将升到第3个字符串的位置。

接下来,p[0], p[1]; 让前两个比较大的,放到第二个的位置。

这样一来,就能够完成总体字符串的排序问题了。

 

下面的函数cmp是用于比较两个字符串的,如果前面的字符串比后面的字符串要大,就交换两个字符串的内容;否则就不变。

最下面的cpy函数是用来赋值的,将后面的字符串赋值给前面的参数中。

您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632