1052 Clasificación de lista enlazada (25 puntos) (usando el método de clasificación de burbujas para ordenar la lista enlazada)

La abuela Chen mencionó que puede usar el método de burbujas para ordenar la lista vinculada, así que traté de usar el método de clasificación de burbujas para esta pregunta. Obviamente, el algoritmo en sí está bien, pero la clasificación de burbujas es un algoritmo de n cuadrados, por lo que, de hecho, la prueba de big data no puede pasar. Si desea obtener la máxima puntuación, use 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;
}

 

Supongo que te gusta

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