Dev - C++ - Ordenar una serie de números de la forma quicksort

 
Vista:
sin imagen de perfil
Val: 7
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ordenar una serie de números de la forma quicksort

Publicado por Anonymus (4 intervenciones) el 14/03/2019 01:31:53
Hola, necesito que me ayuden a hacer un código que sirva para ordenar una serie de números de la forma quicksort, la gracia es que yo pueda ingresar la serie de números que quiero ordenar y se muestra el paso a paso de como se va ejecutando el quicksort, no se me ocurre como poder hacerlo.

De antemano muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 34
Ha disminuido su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

AyudaOrdenar una serie de números de la forma quicksort

Publicado por Allan (17 intervenciones) el 14/03/2019 04:04:17
Mira esté es un código de ejemplo que conseguí por allí solo para mostrarte como debes hacerlo, espero te sirva, porque no tengo mucho tiempo para teclearte mucho código.

Este es mi canal -> https://www.youtube.com/channel/UCZGCgtMKEVqeSB0Go5KwBAA
y en ese mi canal puedes encontrar ciertos códigos que te pueden ayudar, son gratis y los puedes descargar de Github
es programación avanzada, no es el típico tutorial que a veces no muestran algo tan avanzado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#define largo 100
#include"leearreglo.h"
using namespace std;
void quicksort(int A[],int izq, int der )
{
int i, j, x , aux;
i = izq;
j = der;
x = A[ (izq + der) /2 ];
    do{
        while( (A[i] < x) && (j <= der) )
        {
            i++;
        }
 
        while( (x < A[j]) && (j > izq) )
        {
            j--;
        }
 
        if( i <= j )
        {
            // Aquí es dónde tienes que decirle por ejemplo
            // A[i] vale tanto con un cout<< "Valor de: " << A[i];
            // Así sucecivamente en cada intercambio
            aux = A[i];
            A[i] = A[j];
            A[j] = aux;
            i++;  j--;
        }
 
    }while( i <= j );
 
    if( izq < j )
        quicksort( A, izq, j );
    if( i < der )
        quicksort( A, i, der );
}
 
void main ()
{
    int A[largo],n;
    do{
    cout<<"Cantidad de numeros a ingresar: ";cin>>n;
        if(n<=0||n>largo)
            cout<<"Debe ingresar un valor  > a 0 y < a "<<largo<<endl;
    }while(n<=0||n>largo);
    leeCadena(n,A);
    quicksort(A,0,n-1);
    muestraCadena(n,A);
 
}

este es el leer arreglo.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
using namespace std;
void leeCadena(int cant,int n[])
{
    int i;
    for(i=0;i<cant;i++)
    {
        cout<<"Ingresa numero "<<i+1<<": ";
        cin>>n[i];
    }
 
}
 
void muestraCadena(int cant,int n[])
{
    int i;
    for(i=0;i<cant;i++)
    {
        cout<<n[i]<<endl;
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ordenar una serie de números de la forma quicksort

Publicado por Alfil (1444 intervenciones) el 14/03/2019 07:26:10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
 
using namespace std;
 
void quicksort( int *array, int start, int end );
int divide( int *array, int start, int end );
void imprimir( int *array, int size );
 
int main(){
    int size;
 
    cout << "Tamanyo del array: "; cin >> size;
 
    int a[size];
 
    cout << "\nIntroduzca los valores del array:\n";
    for (int i = 0; i < size; i++) {
        cout << "(" << i << "/" << size << "): ";
        cin >> a[i];
    }
 
    cout << "\nArray introducido:\n";
    imprimir( a, size );
 
    cout << endl << endl;
 
    quicksort(a, 0, size - 1);
 
    cout << "\nArray ordenado:\n";
    imprimir( a, size );
 
    cout << endl;
 
    return 0;
}
 
void quicksort(int *array, int start, int end){
    int pivot;
 
    if (start < end) {
        pivot = divide(array, start, end);
        quicksort(array, start, pivot - 1);
        quicksort(array, pivot + 1, end);
    }
}
 
int divide(int *array, int start, int end) {
    int left;
    int right;
    int pivot;
    int temp;
 
    pivot = array[start];
    left = start;
    right = end;
 
    while (left < right) {
        while (array[right] > pivot) {
            right--;
        }
 
        while ((left < right) && (array[left] <= pivot)) {
            left++;
        }
 
        if (left < right) {
            temp = array[left];
            array[left] = array[right];
            array[right] = temp;
        }
    }
 
    temp = array[right];
    array[right] = array[start];
    array[start] = temp;
 
    return right;
}
 
void imprimir( int *array, int size ){
 
    for (int i = 0; i < size; i++) {
        cout << array[i] << " ";
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 7
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ordenar una serie de números de la forma quicksort

Publicado por Anonymus (4 intervenciones) el 18/03/2019 18:55:33
Muchas gracias Alfil!, una consulta, puedo hacer que me muestre el paso a paso del método de quicksort? por ejemplo, que se muestre cuando ordeno los primeros y así hasta quedar totalmente ordenado, no que muestre instantáneamente el array ordenado, no se si me entiendes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar