Classificação da lista vinculada 1052 (25 pontos) (usando o método de classificação por bolha para classificar a lista vinculada)

Vovó Chen mencionou que você pode usar o método de bolha para classificar a lista vinculada, então tentei usar o método de classificação de bolha para esta pergunta. Obviamente, o algoritmo em si está ok, mas o tipo de bolha é um algoritmo de n-quadrados, então, de fato, o teste de big data não pode passar. Se você quiser obter a nota máxima, basta usar stl.

#include<cstdio>

struct Node{
	int key;
	int next;
	bool flag;
	Node(){
		flag = false;
	}
}node[100010];

int main()
{
	int n,firstAdd;
	int firstNode = 100000;
	scanf("%d%d",&n,&firstAdd);
	node[firstNode].next = firstAdd;
	int i,address,key,next;
	for(i=0; i<n; i++)
	{
		scanf("%d%d%d",&address,&key,&next);
		node[address].key = key;
		node[address].next = next;
		node[address].flag = true;
	}
	int p=firstAdd,cnt=0;
	if(node[p].flag==false){
		printf("0 -1\n");
		return 0;
	}
	while(p!=-1)
	{
		cnt++;
		p=node[p].next;
	}
	int j,left,mid,right,cnt1;
	for(i=cnt-1;i>=1;i--)
	{
		left = firstNode;
		mid = node[firstNode].next;
		right = node[mid].next;
		cnt1 = 0;
		bool flag = false;
		while(cnt1<i)
		{
			cnt1++;//printf("cnt1=%d\n",cnt1);
			if(node[mid].key>node[right].key)
			{
				//printf("%d %d交换\n",node[mid].key,node[right].key);
				node[mid].next = node[right].next;
				node[right].next = mid;
				node[left].next = right;
				left=right;
				right = node[mid].next;
				flag = true;
			}
			else
			{
				left = mid;
				mid = right;
				right = node[mid].next;
			}	
		}
		if(flag==false)break;
	}
	p=node[firstNode].next;
	printf("%d %05d\n",cnt,p);
	while(p!=-1)
	{
		printf("%05d %d ",p,node[p].key);
		if(node[p].next==-1)printf("-1\n");
		else printf("%05d\n",node[p].next);
		p = node[p].next; 
	}
	return 0;
}

 

Acho que você gosta

Origin blog.csdn.net/yiwaite/article/details/105491922
Recomendado
Clasificación