Título: [C++] [Punteros] Ordenar array de enteros, pesadilla total. Publicado por: DarkItachi en 3 Mayo 2010, 21:15 pm Buenas, estoy intentando, mediante punteros, ordenar los enteros de un array por orden ascendente yendo simultáneamente por los dos extremos del array, algo así:
4 5 1 2 7 8 5 4 3 6 Comparo 4, 5 y 3 y 6. 4 5 1 2 7 8 5 4 3 6 Comparo 5,1 y 4,3 4 1 5 2 7 8 5 3 4 6 etc. El caso esque creo que me estoy haciendo un lío enorme y creo no estar planteando bien el ejercicio, llevo hecho esto: Código
Alguna idea sobre donde estoy metiendo la pata? Porque de verdad, tantos asteriscos y demás me atormentan. PD: Aún no he realizado lo de modo ascendente. Salu2 y gracias =D Título: Re: [C++] [Punteros] Ordenar array de enteros, pesadilla total. Publicado por: leogtz en 3 Mayo 2010, 21:52 pm Edit.
Título: Re: [C++] [Punteros] Ordenar array de enteros, pesadilla total. Publicado por: biribau en 3 Mayo 2010, 22:02 pm No entiendo lo que haces, pero un error que canta a la vista es la condición del while, no estas mirando que se crucen los punteros, tienes que quitar para eso los asteriscos, o sea *(p++) != *(q--) por p++ != q--
Luego si pretendes ordenar, no sé, ordenar un vector requiere un análisis matemático para desarrollar un algoritmo nuevo. Simplemente lo digo porque ese método no funcionará, o imitas burbuja(requieres otro while anidado) o quicksort, no se que intentas, es parecido a ambos, pero no es ninguno. Ya de paso que sepas que casi fijo necesitarás 2 bucles anidados, porque toda ordenación genérica no puede bajar de O(nlog2n), o sea un bucle y algo más. Título: Re: [C++] [Punteros] Ordenar array de enteros, pesadilla total. Publicado por: DarkItachi en 3 Mayo 2010, 22:12 pm No entiendo lo que haces, pero un error que canta a la vista es la condición del while, no estas mirando que se crucen los punteros, tienes que quitar para eso los asteriscos, o sea *(p++) != *(q--) por p++ != q-- Luego si pretendes ordenar, no sé, ordenar un vector requiere un análisis matemático para desarrollar un algoritmo nuevo. Simplemente lo digo porque ese método no funcionará, o imitas burbuja(requieres otro while anidado) o quicksort, no se que intentas, es parecido a ambos, pero no es ninguno. Ya de paso que sepas que casi fijo necesitarás 2 bucles anidados, porque toda ordenación genérica no puede bajar de O(nlog2n), o sea un bucle y algo más. Bien, cambié lo que me dijistes, pero me peta en tiempo de ejecución, supongo que algun indice fuera de lugar, tenía pensado el método burbuja pero el enunciado dice simultáneamente desde los dos extremos, voy a mirar que puede ser y mañana os cuento. Salu2 Título: Re: [C++] [Punteros] Ordenar array de enteros, pesadilla total. Publicado por: biribau en 3 Mayo 2010, 22:19 pm Claro que te peta, porque mientras uno decrementa otro incrementa, si el numero de elementos es par, ambos se "esquivan", y siguen creciendo to locos, disparados.
Ten en cuenta que un incremento + un decremento, es como avanzar de 2 en 2, a veces no se encontrarán. edito: Antes no te lo dije porque no creí que pensaras que eso puede ordenar, necesitas otro bucle para hacer más pasadas, si pudieras ordenar ese vector aunque fuera de 5 elementos en una pasada, serías el nuevo Einstein :laugh: eh! no digo que no lo seas, era sólo un chiste ;). Título: Re: [C++] [Punteros] Ordenar array de enteros, pesadilla total. Publicado por: .:BlackCoder:. en 4 Mayo 2010, 01:50 am Ese metodo de ordenacion sirve? 0o? no creo... Pero existen muchos... Esta el metodo por insercion, por seleccion (que es el que mas me gusta), burbuja, quicksort, etc... Mejor usa otro...
Saludos... Título: Re: [C++] [Punteros] Ordenar array de enteros, pesadilla total. Publicado por: .:BlackCoder:. en 4 Mayo 2010, 04:12 am Ademas estas bastante errado con respecto a como entendiste el enunciado... tienes que recorrer el vector comparando el ultimo con el primero... luego el primero+1 con el ultimo-1... Y asi sucesivamente... No el primero con el primero +1 0o? :-\ Y cuando dice que si se cumple la condicion se empieze de nuevo, no tiene sentido porq igual estarias comprando lo mismo... De nuevo...
Saludos... Título: Re: [C++] [Punteros] Ordenar array de enteros, pesadilla total. Publicado por: DarkItachi en 4 Mayo 2010, 06:40 am Ademas estas bastante errado con respecto a como entendiste el enunciado... tienes que recorrer el vector comparando el ultimo con el primero... luego el primero+1 con el ultimo-1... Y asi sucesivamente... No el primero con el primero +1 0o? :-\ Y cuando dice que si se cumple la condicion se empieze de nuevo, no tiene sentido porq igual estarias comprando lo mismo... De nuevo... Saludos... Bien, creo que ya lo pillé, esta tarde vuelvo a hacer el argoritmo de la forma que dices tu =D Ya os contaré :p PD: Gracias Título: Re: [C++] [Punteros] Ordenar array de enteros, pesadilla total. Publicado por: DarkItachi en 5 Mayo 2010, 07:21 am Voy de mal en peor :S
Código
Esto es lo que intenté hacer, pero sigo sin conseguirlo, :s, alguna idea? Título: Re: [C++] [Punteros] Ordenar array de enteros, pesadilla total. Publicado por: biribau en 5 Mayo 2010, 17:56 pm Voy de mal en peor :S Es que no sé que intentas hacer... Código
Esto es lo que intenté hacer, pero sigo sin conseguirlo, :s, alguna idea? 2 consejos:
Mergesort(es más parecido al tuyo) - ordena la mitad del vector y luego mezcla ambos vectores ordenados Quicksort separa los mayores de un pivote de los menores en 2 particiones y ordena ambas mitades por el mismo método. También tienes la burbuja que tenía una variante que sube y baja. Yo no sé cómo se diseña un algoritmo de ordenación pero ya lo intenté alguna vez y no es sencillo, seguramente se necesite un desarrollo matemático, o al menos un pensamiento profundo. Si expones tu idea te podremos ayudar pero si estás codeando sin pensarlo es difícil que te salga(al menos has de contemplar todos los casos). |