• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

223
Views
¿Por qué Bubble Sort en C# es más lento que JavaScript para mí?

Soy nuevo en C# y he estado jugando con él. Implementé un tipo de burbuja en C# esperando que fuera más rápido que JavaScript, ya que es un lenguaje compilado, pero obtengo velocidades mucho más lentas.

Estoy clasificando 100.000 números.

En C# obtengo una velocidad de aproximadamente: 1 minuto y 30 segundos

Código C#:

 using System.Diagnostics; public class Program { public static void Main(string[] args) { List<int> randoms = generateRandoms(0, 1000000, 100000); Console.WriteLine(randoms.Count); Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); bubbleSort(randoms); stopWatch.Stop(); TimeSpan timeSpan = stopWatch.Elapsed; Console.WriteLine("Total processing time... {0:00}:{1:00}:{2:00}.{3:000}", timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds); Console.Read(); } static List<int> generateRandoms(int min, int max, int amount) { Random rnd = new Random(); List<int> randoms = new List<int>(); for (int i = 0; i < amount; i++) { int r = rnd.Next(min, max+1); randoms.Add(r); } return randoms; } static List<int> bubbleSort(List<int> list) { //Bubble sort for (int i = 0; i < list.Count; i++) { for (int j = 0; j < list.Count - i - 1; j++) { if (list[j] > list[j+1]) { int temp = list[j]; list[j] = list[j+1]; list[j+1] = temp; } } } return list; } static void print(List<int> list) { for (int i = 0; i < list.Count; i++) { Console.WriteLine(list[i]); } } }

En JavaScript obtengo aproximadamente: 30 segundos

Código JavaScript:

 function bubbleSort(array) { for (let i = 0; i < array.length; i++) { for (let j = 0; j < array.length-i-1; j++) { if (array[j] > array[j+1]) { [array[j], array[j+1]] = [array[j+1], array[j]]; } } } } function generateRandoms(min, max, n) { const arr = []; for (let i = 0; i < n; i++) { arr.push(Math.floor(Math.random() * (max-min+1) + min)); } return arr; } const array = generateRandoms(0, 1000000, 100000); console.log(array.length); const start = new Date(); bubbleSort(array); const end = new Date(); console.log(`Performance: ${end - start}ms`);

Supuse que tenía que ver con la estructura de datos "Lista" en C#, pero después de mirar la documentación, parece que todas las operaciones que estoy usando en la función bubbleSort son O(1)

¿Alguien tiene una idea de por qué las velocidades son mucho peores en C# para mí? Estoy usando .Net v6.0.201. También estoy usando VSCode para ambos programas.

over 3 years ago · Santiago Trujillo
2 answers
Answer question

0

Supuse que tenía que ver con la estructura de datos "Lista" en C#, pero después de mirar la documentación, parece que todas las operaciones que estoy usando en la función bubbleSort son O(1)

O(1) no es necesariamente rápido , es simplemente constante. Cambiar el código C# para usar una matriz duplica aproximadamente su velocidad. No estoy seguro exactamente por qué es eso (List usa arreglos debajo del capó), pero los arreglos IIRC a veces pueden eludir las comprobaciones de límites.

Además, su intercambio de C# está haciendo un poco más de trabajo que su intercambio de JS; puedes reemplazar esto:

 int temp = list[j]; list[j] = list[j+1]; list[j+1] = temp;

con este:

 (list[j], list[j+1]) = (list[j+1], list[j]);

Los dos idiomas están más cerca después de esos cambios, pero JS aún gana; No estoy seguro de por qué.

Actualización: C# es más rápido para mí si recuerdo compilar en modo Release.

over 3 years ago · Santiago Trujillo Report

0

C# es tan rápido, si no un poco más rápido, que JS cuando se construye en modo de lanzamiento . Al menos en mi computadora.

Total processing time... 00:01:00.611 : bandeja de depuración

Total processing time... 00:00:19.586 : bandeja de liberación

over 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error