Por que no se ordena?

Iniciado por manutmac, 15 Noviembre 2012, 21:23 PM

0 Miembros y 1 Visitante están viendo este tema.

manutmac

este problema me esta matando, soy el mismo de otras veces quiero ordenarlo alfabeticamente. No veo fallos pero no se ordena. aqui os dejo mi intento

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {

const char *const pnames[200] = {"Muhittin", "Mufit", "Serkan", "Kaan",
"Izzet", "Muzaffer", "Umid", "Sami", "Uykura", "Kayhan", "Yakup", "Mert",
"Cetin", "Ilknur", "Gokhan", "Salah", "Irem", "Korhan", "Isin", "Berk",
"Tacettin", "Duygu", "Figen", "Funda", "Fuat", "Arda","Muhsin", "Guray",
"Necati", "Kadriye", "Gurbuz", "Hamide", "Volkan", "Selami", "Esra",
"Cumhur", "Can", "Aleyna", "Salih", "Kamuran", "Ferhan", "Furuze",
"Sukufe", "Sidre", "Cahit", "Sercan", "Jale", "Bilge", "Tijen", "Tufan",
"Zeliha", "Cevdet", "Burak", "Ufuk", "Zarife", "Bengisu", "Melda", "Zafer",
"Yelda", "Didar", "Hande", "Cumali", "Dilek", "Kemal", "Hasan", "Ismail",
"Fatma", "Burcu", "Siyami", "Busra", "Gizem", "Ramize", "Sezai", "Polat",
"Melike", "Umut", "Serencan", "Uzeyir", "Kamile", "Deniz", "Veysel",
"Emrehan", "Gulcan", "Ender", "Furkan", "Veli", "Muhtesem", "Necmettin",
"Osman", "Perihan", "Didem", "Tunc", "Irmak","Petek", "Sebahat", "Halime",
"Mahir", "Leyla", "Eda", "Ali", "Ibrahim", "Berivan", "Ilter", "Metin",
"Bozkurt", "Olgun", "Hudai", "Esin", "Taylan", "Memduh", "Selimcan",
"Ayse", "Baran", "Keriman", "Tankurt", "Feramuz", "Abdullah", "Ferda",
"Kuntay", "Ceyhan", "Edip", "Nuri", "Mahide", "Selda", "Murathan",
"Celebi", "Talha", "Mehtap", "Ece", "Abdurrahman", "Baki", "Anil", "Unsal",
"Melahat", "Sezgin", "Miran", "Cansel", "Sibel", "Aliye", "Derya", "Naime",
"Gulden", "Konar","Soner", "Gulistan", "Mestan", "Galip", "Lamia", "Hakan",
"Ugur", "Ege", "Husnu", "Sumbul", "Mustafa", "Simge", "Selva", "Mehmet",
"Irfan", "Cezmi", "Turgut", "Konur", "Aysegul", "Mesut", "Ceren", "Adem",
"Ferhat", "Murat", "Yunus", "Beyhan", "Erdem", "Sunusi", "Ata", "Sencer",
"Handan", "Cihan", "Levent", "Aykut", "Ferit", "Demir", "Kerim", "Feraye",
"Caner", "Baris", "Ozlem", "Ihsan", "Meltem","Kurthan", "Okan", "Huseyin",
"Sezgi", "Celik", "Cemal", "Sinan", "Sefa", "Cigdem", "Leman", "Nejla",
"Gurkan", "Gulsum", "Damla",};

int pos[200];
   int i, aux, j;

   for(i=0;i<200;i++)
       pos[i ] = i;

   for(i=1;i<200;i++)
       for(j=0;j<(200-i);j++)
           if(pnames[j]>pnames[j+1])
           {
               aux = pos[j];
               pos[j] = pos[j+1];
               pos[j+1] = aux;

           }

   for(i=0;i<200;i++)
       printf("%s\n", pnames[pos[ i ] ] );
system("pause");
   return 0;
}

rir3760

El problema se debe a que estas comparando las direcciones de memoria con:
if (pnames[j] > pnames[j + 1]){
   aux = pos[j];
   pos[j] = pos[j + 1];
   pos[j + 1] = aux;
}


En su lugar debes utilizar la función "strcmp" (prototipo en <string.h>):
if (strcmp(pnames[pos[j]], pnames[pos[j + 1]]) > 0){
   aux = pos[j];
   pos[j] = pos[j + 1];
   pos[j + 1] = aux;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

manutmac

muchas gracias ahora funciona a la perfeccion.  ;D