Paso un tiempo implementando un algoritmo de solución rápida en C#. Después de terminar, comparé la velocidad de mi implementación y la Array.Sort-Method de C#.Implementación del algoritmo de ordenación más segura
Acabo de comparar la velocidad de trabajo en arreglos int aleatorios.
Aquí está mi aplicación:
static void QuickSort(int[] data, int left, int right)
{
int i = left - 1,
j = right;
while (true)
{
int d = data[left];
do i++; while (data[i] < d);
do j--; while (data[j] > d);
if (i < j)
{
int tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
else
{
if (left < j) QuickSort(data, left, j);
if (++j < right) QuickSort(data, j, right);
return;
}
}
}
Rendimiento (al ordenar un entero aleatorio [] con una longitud de 100 millones):
- mi algoritmo: 14.21 segundos
- .Net matriz <int> .Sort: 14.84 segundos
¿Alguien sabe cómo implementar mi a lgorithm incluso más rápido?
¿O alguien puede proporcionar una implementación más rápida (no es necesario que sea un servicio rápido) que mi ejecución más rápido?
Nota:
- por favor, no hay algoritmos que utilizan múltiples núcleos/procesadores para mejorar perrformance
- única fuente de C# válida código
voy a probar el rendimiento de los algoritmos proporcionados dentro de una unos minutos si estoy en línea
EDIT:
¿Cree que usar una red de clasificación ideal para piezas con menos de 8 valores mejoraría el rendimiento?
intente repetir sus tiempos cuando una matriz ya está ordenada ... Luego, con una matriz que solo tiene dos elementos en el orden incorrecto ... –
Una ganancia de rendimiento del 4.3% - ¿Está haciendo esto por razones académicas? – flq
Ian tiene razón acerca de la matriz ya ordenada. Su elección de un elemento de pivote tendrá el peor rendimiento en el peor de los casos. Habiendo dicho eso, acelerar Quicksort es bastante sencillo. Seleccione un pivote mejor usando algo como el método MedianOfThree y use un algoritmo de clasificación más apropiado para particiones pequeñas. Supongo que está haciendo esto para investigación personal porque el método de clasificación de biblioteca del sistema es casi siempre la respuesta correcta. – Blastfurnace