Cómo ordenar en orden ascendente en el programa C

Según yo, depende del tipo de datos, es decir, supongamos que si desea ordenar el tipo de datos de cadena, usó la clasificación lexicográfica y la selección del algoritmo de clasificación también depende del tamaño de los datos, es decir, si desea ordenar un tipo de datos grande, entonces uno vaya a la combinación de clasificación porque el tiempo de ejecución para el peor de los casos es o (n log n) y si su tipo de datos es entero y el tamaño es pequeño, entonces vaya para la clasificación, el peor tiempo de ejecución es o (n), así que este es el la forma en que elige su algoritmo de clasificación para que el tiempo de ejecución de su programa sea mínimo y todo el algoritmo clasifique los datos en orden ascendente si desea ordenar los datos que dependen de la raíz, entonces elija la clasificación de la raíz y la selección del algoritmo también depende de la disposición de los datos supone que sus datos ya están ordenados, entonces uno quiere ir a una clasificación rápida, pero este es el peor caso de clasificación rápida.

Entonces el algoritmo de clasificación depende de

  1. Tipo de datos
  2. Tamaño de datos
  3. disposición de los datos en la dirección de memoria

pero para lo básico, va a ordenar buble, ordenar por inserción, ordenar por selección, ordenar por fusión

código para ordenar por fusión

/* C program for Merge Sort */

#include

#include

// Merges two subarrays of arr[].

// First subarray is arr[l..m]

// Second subarray is arr[m+1..r]

merge(int void merge(int arr[], int l, int m, int r)

{

int i, j, k;

int n1 = m - l + 1;

int n2 = r - m;

/* create temp arrays */

int L[n1], R[n2];

/* Copy data to temp arrays L[] and R[] */

for (i = 0; i < n1; i++)

L[i] = arr[l + i];

for (j = 0; j < n2; j++)

R[j] = arr[m + 1+ j];

/* Merge the temp arrays back into arr[l..r]*/

i = 0; // Initial index of first subarray

j = 0; // Initial index of second subarray

k = l; // Initial index of merged subarray

while (i < n1 && j < n2)

{

if (L[i] <= R[j])

{

arr[k] = L[i];

i++;

}

else

{

arr[k] = R[j];

j++;

}

k++;

}

/* Copy the remaining elements of L[], if there

are any */

while (i < n1)

{

arr[k] = L[i];

i++;

k++;

}

/* Copy the remaining elements of R[], if there

are any */

while (j < n2)

{

arr[k] = R[j];

j++;

k++;

}

}

/* l is for left index and r is right index of the

sub-array of arr to be sorted */

void mergeSort(int arr[], int l, int r)

{

if (l < r)

{

// Same as (l+r)/2, but avoids overflow for

// large l and h

int m = l+(rl)/2;

// Sort first and second halves

mergeSort(arr, l, m);

mergeSort(arr, m+1, r);

merge(arr, l, m, r);

}

}

/* UTILITY FUNCTIONS */

/* Function to print an array */

void printArray(int A[], int size)

{

int i;

for (i=0; i < size; i++)

printf("%d ", A[i]);

printf("\n");

}

/* Driver program to test above functions */

int main()

{

int arr[] = {12, 11, 13, 5, 6, 7};

int arr_size = sizeof(arr)/sizeof(arr[0]);

printf("Given array is \n");

printArray(arr, arr_size);

mergeSort(arr, 0, arr_size - 1);

printf("\nSorted array is \n");

printArray(arr, arr_size);

return 0;

}

Complejidad del tiempo: clasificación de matrices en diferentes máquinas. Merge Sort es un algoritmo recursivo y la complejidad del tiempo se puede expresar como la siguiente relación de recurrencia.
T (n) = 2T (n / 2) +

La recurrencia anterior se puede resolver utilizando el método del árbol de recurrencia o el método maestro. Cae en el caso II del Método Maestro y la solución de la recurrencia es

.
La complejidad de tiempo de Merge Sort es

En los 3 casos (peor, promedio y mejor), la ordenación por fusión siempre divide la matriz en dos mitades y toma tiempo lineal para fusionar las dos mitades.

Espacio auxiliar: O (n)

Paradigma algorítmico: divide y vencerás

Clasificación en el lugar: no en una implementación típica

Estable:

  1. / *
  2. * Programa C para aceptar N números y organizarlos en orden ascendente
  3. * /
  4. #include
  5. vacío principal()
  6. {
  7. int i, j, a, n, número [30];
  8. printf (“Ingrese el valor de N \ n”);
  9. scanf (“% d”, & n);
  10. printf (“Ingrese los números \ n”);
  11. para (i = 0; i
  12. scanf (“% d”, y número [i]);
  13. para (i = 0; i
  14. {
  15. para (j = i + 1; j
  16. {
  17. if (número [i]> número [j])
  18. {
  19. a = número [i];
  20. número [i] = número [j];
  21. número [j] = a;
  22. }
  23. }
  24. }
  25. printf (“Los números ordenados en orden ascendente se dan a continuación \ n”);
  26. para (i = 0; i
  27. printf (“% d \ n”, número [i]);
  28. }

Es fácil ordenar en lenguaje C si usa la función de compilación qsort ();

void qsort (void * base, size_t nitems, size_t size, int (* compar) (const void *, const void *))

Entonces aquí está el código:

#include
#include
valores int [] = {88, 56, 100, 2, 25};
int cmpfunc (const void * a, const void * b)
{
return (* (int *) a <* (int *) b);
}
int main ()
{
int n;
printf (“Antes de ordenar la lista es: \ n”);
para (n = 0; n <5; n ++)
{
printf (“% d”, valores [n]);
}

qsort (valores, 5, sizeof (int), cmpfunc);
printf (“\ nDespués de ordenar la lista es: \ n”);

para (n = 0; n <5; n ++)

{

printf (“% d”, valores [n]);

}
retorno (0);

}

Por cierto, para ordenar en orden descendente, puede cambiar el cmpfunc para que sea verdadero cuando a sea mayor que b.

Hay varios algoritmos de clasificación disponibles para ordenar sus datos y solo depende de usted cuál de ellos usar (obviamente, dependiendo de la aplicación).

1- tipo de burbuja.

2- Selección de clasificación.

3- Ordenación por inserción.

4- Fusionar ordenación.

5- Tipo de concha.

6- Clasificación rápida.

Eche un vistazo a cada uno de ellos aquí: Técnicas de clasificación.

Espero eso ayude !

Hola..

Creo que tienes una idea básica sobre la programación … eso es bueno y hay muchas técnicas de clasificación … Puedes referirlos aquí Algoritmos – GeeksforGeeks. Puedes aprender de la mejor manera … Gracias …

More Interesting

¿La programación a nivel del sistema se ha vuelto obsoleta?

¿Qué tan rápido se puede crear un algoritmo?

¿Qué es mejor: una lista enlazada de codificación o el uso de libs de plantillas estándar?

¿Puede crear un puntero 2D dinámico que almacene elementos ingresados ​​por el usuario como una matriz y lo muestre antes y después de liberarlo?

¿Cuáles son algunos algoritmos del mundo real que corresponden al 'caso 3' del método maestro?

¿Cuál es una forma rápida de factorizar números con 12 dígitos sin utilizar ningún algoritmo de división de prueba o Pollard-Rho?

¿Cuáles son las mejores aplicaciones de algoritmos en la vida real?

¿Aprender las estructuras de datos usando Python en lugar de C afectará mi comprensión de las estructuras de datos?

¿Qué puedo hacer para mejorar mi habilidad matemática en estructura de datos y programación general?

¿Cuáles son las aplicaciones más prácticas (vida cotidiana) del algoritmo de agrupación de k-means? ¿Cómo se ha utilizado exactamente k-means en estas aplicaciones?

Cómo ordenar la matriz de tipos primitivos en orden descendente en Java

¿Qué libro debo elegir para aprender algoritmos y estructuras de datos? Ver la descripción.

¿Cuál es la mejor manera de procesar consultas de accesibilidad en un DAG con restricciones?

¿Cuáles serían las implicaciones si pudiera demostrar que he descifrado el algoritmo criptográfico RSA en tiempo polinómico? ¿Qué debería hacer después?

¿En qué se diferencia una tabla hash de una lista vinculada o una matriz?