NorTheR 0 Denunciar post Postado Novembro 29, 2006 Alguem tem um codigo pronto pra fazer isso.. não consigo de jeito algum, já tentei de tudo e nada.. plz http://forum.imasters.com.br/public/style_emoticons/default/upset.gif ARRAY: 1,6,3,5 ORDENADO: 1,3,5,6 ORD PELO INDICE: 1,3,4,2 (excluindo o zero) Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Dezembro 19, 2006 ORD PELO INDICE: 1,3,4,2 (excluindo o zero)nao entendi esse Compartilhar este post Link para o post Compartilhar em outros sites
Rulez 0 Denunciar post Postado Dezembro 19, 2006 #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
NorTheR 0 Denunciar post Postado Dezembro 19, 2006 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
matt.cavotta 0 Denunciar post Postado Janeiro 7, 2007 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