Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

NorTheR

Ordenar pegando o indice

Recommended Posts

#include <stdio.h>#include <stdlib.h>#include <string.h>#undef NULL#define NULL -1typedef char TInfo[30];struct TNo { TInfo info; int prox; // struct TNo *prox;};typedef struct { int prim, ult; // struct TNo *prim, ult; int qtd; } TDescritor; TDescritor lista;struct Armazenagem { // area de armazenamento #define MAX 100 TNo elem[MAX]; int contElem; Armazenagem() { contElem=0; } int aloca() { if (contElem==MAX) return NULL; return contElem++; } #undef MAX} armazenagem;void iniciaLLSECD(TDescritor *l) { l->prim=l->ult=NULL; l->qtd=0;}bool insereOrdenadoLista(TDescritor *l, TInfo val) { int r=armazenagem.aloca(); // retorna o indice do proximo elemento livre if (r==NULL) return false; strcpy(armazenagem.elem[r].info, val); (l->qtd)++; if (l->qtd==1) { armazenagem.elem[r].prox=NULL; l->prim=l->ult=r; } else { int p=l->prim, q=NULL; while (p!=NULL && strcmp(val, armazenagem.elem[p].info) > 0) { q = p; p = armazenagem.elem[p].prox; } if (p==l->prim) { armazenagem.elem[r].prox=l->prim; l->prim=r; } else if (p==NULL) { armazenagem.elem[r].prox=NULL; armazenagem.elem[l->ult].prox=r; l->ult=r; } else { armazenagem.elem[r].prox=p; armazenagem.elem[q].prox=r; } } return true;}void mostraLista(TDescritor *l) { int p = l->prim; while (p!=NULL) { printf("%s ", armazenagem.elem[p].info); p = armazenagem.elem[p].prox; } printf("\n");}int main() { char str[100]; iniciaLLSECD(&lista); insereOrdenadoLista(&lista, "999"); insereOrdenadoLista(&lista, "222"); insereOrdenadoLista(&lista, "333"); insereOrdenadoLista(&lista, "888"); insereOrdenadoLista(&lista, "111"); insereOrdenadoLista(&lista, "555"); insereOrdenadoLista(&lista, "000"); printf("----------------------\n"); mostraLista(&lista); getchar(); return 0;}

se voce tive paciencia de interpreta esse codigo, ele ordena por indice se eu me lembro bem, senao eu coloquei o arquivo errado

Compartilhar este post


Link para o post
Compartilhar em outros sites

huhuu, to ligado que ordenar por indice é um pé no saco, mas eu fiz um com umas 20 linhas que ordena por indice se não tiver numeros iguais, aí funciona certinho.. mas não o encontro. =\ps.: não precisava desenterrar o topico :P mas tudo bem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Acho que entendi sua ordenação por índices:

 

Por exemplo seu vetor:

1 6 3 5

1 2 3 4 <- índice ignorando o '0'

 

Ordenando por valor, mas mantendo o índice original:

1 3 5 6 < - ordenado por valor

1 3 4 2 < - ordenado por índice

 

Segue o c-ódigo: (roda no ubuntu 6.10)

# include <stdio.h># include <stdlib.h>typedef struct {  int val;  int index;} data;int cmp (const void *_a, const void *_b){  data *a = (data*)_a;  data *b = (data*)_b;  return a->val - b->val;}int main (){    int n, i;  data v[100];  /* tamanho do vetor */  scanf("%d",&n);    /* le elementos do vetor */  for (i=0; i<n; i++){	scanf("%d",&v[i].val);	/* guarda o indice inicial excluindo o '0' */	v[i].index = i+1;  }  /* ordena pelo valor */  qsort(v,n,sizeof(data),cmp);    /* mostra ordenacao por valor */  for (i=0; i<n; i++)	printf("%d ",v[i].val);  printf("\n");  /* mostra ordenacao por indice */  for (i=0; i<n; i++)	printf("%d ",v[i].index);  printf("\n");  return 0;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.