Dev - C++ - Algoritmo de ordenacion shaker sort no funciona

 
Vista:
Imágen de perfil de Juan Manuel
Val: 38
Ha disminuido su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Algoritmo de ordenacion shaker sort no funciona

Publicado por Juan Manuel (21 intervenciones) el 22/06/2019 04:19:31
Hola , estuve probando el siguiente modulo de ordenacion y no puedo hacerlo funcionar

La variable ocup indica la ultima posicion del vector con contenido, pri es el inicio del vector y ult toma valor del ocup, ordenado es una bandera que se vuelve true al inicio del while pero de llevarse a cabo algun cambio se volvera falsa pero si no se ejecuta ningun cambio quedara true y saldra del bucle while con el vector ordenado.

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
void sacudida_shaker_sort (tvector &a, int ocup)
{
	int pri=0,ult=ocup,i;
	bool ordenado=false;
	while (ordenado==false && pri <= ult);
	{	ordenado=true;
		for(i=ult;i>=pri+1;i--)
		{
			if(a[i]<a[i-1])
				{
				cambio(a[i],a[i-1]);
				ordenado=false;
				}
		}
		pri ++;
		if (ordenado==false)
		{
			ordenado=true;
			for(i=pri;i<=ult-1;i++)
			{
				if(a[i]>a[i+1])
				{
				cambio(a[i],a[i+1]);
				ordenado=false;
				}
			}
		}
		ult--;
	}
}
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
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++

Algoritmo de ordenacion shaker sort no funciona

Publicado por Alfil (1444 intervenciones) el 22/06/2019 09:29:01
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
#include<iostream>
 
using namespace std;
 
void swap( int *a, int *b )
{
   int temp;
   temp = *a;
   *a = *b;
   *b = temp;
}
 
void ShakerSort( int a[], int m )
{
   for( int i = 0; i < m; i++ ) {
      for( int j = i+1; j < m; j++ ) {
         if( a[j] < a[j-1] )
            swap( &a[j], &a[j-1] );
      }
      m--;
      for( int k = m-1; k > i; k-- ) {
         if( a[k] < a[k-1] )
            swap( &a[k], &a[k-1] );
      }
   }
}
 
int main() {
 
   int n;
 
   cout << "\nNumero de elementos a ordenar: ";
   cin >> n;
 
   int a[n];
 
   for( int i = 0; i < n; i++ ) {
      cout << "Introduce el elemento " << i+1 << ": ";
      cin >> a[i];
   }
 
   ShakerSort(a, n);
 
   cout << "\nDatos ordenados ";
   for( int i = 0; i < n; i++ )
      cout << " -> " << a[i];
 
   cout << endl;
 
   return 0;
}
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