sort method bubble c# arrays sorting bubble-sort

bubble sort method c#



Burbuja simple tipo c# (15)

Esta funciona para mí

public static int[] SortArray(int[] array) { int length = array.Length; int temp = array[0]; for (int i = 0; i < length; i++) { for (int j = i+1; j < length; j++) { if (array[i] > array[j]) { temp = array[i]; array[i] = array[j]; array[j] = temp; } } } return array; }

int[] arr = {800,11,50,771,649,770,240, 9}; int temp = 0; for (int write = 0; write < arr.Length; write++) { for (int sort = 0; sort < arr.Length - 1; sort++) { if (arr[sort] > arr[sort + 1]) { temp = arr[sort + 1]; arr[sort + 1] = arr[sort]; arr[sort] = temp; } } Console.Write("{0} ", arr[write]); }

Todo lo que estoy tratando de hacer es una simple ordenación de burbuja con esta matriz. Me gustaría averiguar por qué la clasificación está arruinada. En el ejemplo, aquí es cuando la matriz es {800,11,50,771,649,770,240, 9} :

Esto es lo que se muestra: 11, 50, 649, 9, 649, 770, 771, 800

Estoy pensando que podría faltar algo en la comparación.


Esto es lo que escribí usando métodos recursivos:

public static int[] BubbleSort(int[] input) { bool isSorted = true; for (int i = 0; i < input.Length; i++) { if (i != input.Length - 1 && input[i] > input[i + 1]) { isSorted = false; int temp = input[i]; input[i] = input[i + 1]; input[i + 1] = temp; } } return isSorted ? input : BubbleSort(input); }


No, su algoritmo funciona, pero su operación de Write está fuera de lugar dentro del bucle externo.

int[] arr = { 800, 11, 50, 771, 649, 770, 240, 9 }; int temp = 0; for (int write = 0; write < arr.Length; write++) { for (int sort = 0; sort < arr.Length - 1; sort++) { if (arr[sort] > arr[sort + 1]) { temp = arr[sort + 1]; arr[sort + 1] = arr[sort]; arr[sort] = temp; } } } for (int i = 0; i < arr.Length; i++) Console.Write(arr[i] + " "); Console.ReadKey();


Solo otro ejemplo, pero con un bucle WHILE externo en lugar de un FOR:

public static void Bubble() { int[] data = { 5, 4, 3, 2, 1 }; bool newLoopNeeded = false; int temp; int loop = 0; while (!newLoopNeeded) { newLoopNeeded = true; for (int i = 0; i < data.Length - 1; i++) { if (data[i + 1] < data[i]) { temp = data[i]; data[i] = data[i + 1]; data[i + 1] = temp; newLoopNeeded = false; } loop++; } } }


Su Console.Write("{0} ", arr[write]); es muy temprano Estás imprimiendo los valores mientras la clasificación aún está en progreso . Por ejemplo, está imprimiendo 9 como índice 3 en la matriz, pero en la siguiente iteración del bucle, el 9 ha movido al índice 2 y 240 ha movido al índice 3 ... sin embargo, su bucle externo se ha movido Adelante, por lo que imprime 649 la segunda vez y 240 nunca se imprime.


Tipo de burbuja con dirección de ordenación

using System; public class Program { public static void Main(string[] args) { var input = new[] { 800, 11, 50, 771, 649, 770, 240, 9 }; BubbleSort(input); Array.ForEach(input, Console.WriteLine); Console.ReadKey(); } public enum Direction { Ascending = 0, Descending } public static void BubbleSort(int[] input, Direction direction = Direction.Ascending) { bool swapped; var length = input.Length; do { swapped = false; for (var index = 0; index < length - 1; index++) { var needSwap = direction == Direction.Ascending ? input[index] > input[index + 1] : input[index] < input[index + 1]; if (needSwap) { var temp = input[index]; input[index] = input[index + 1]; input[index + 1] = temp; swapped = true; } } } while (swapped); } }


Vi a alguien usar este ejemplo como parte de una prueba de solicitud de empleo. Mi respuesta a él fue que carece de un escape del bucle externo cuando la matriz está ordenada en su mayoría.

Considera lo que pasaría en este caso:

int[] arr = {1,2,3,4,5,6,7,8};

Aquí hay algo que tiene más sentido:

int[] arr = {1,2,3,4,5,6,7,8}; int temp = 0; int loopCount=0; bool doBreak=true; for (int write = 0; write < arr.Length; write++) { doBreak=true; for (int sort = 0; sort < arr.Length - 1; sort++) { if (arr[sort] > arr[sort + 1]) { temp = arr[sort + 1]; arr[sort + 1] = arr[sort]; arr[sort] = temp; doBreak=false; } loopCount++; } if(doBreak){ break; /*early escape*/ } } Console.WriteLine(loopCount); for (int i = 0; i < arr.Length; i++) Console.Write(arr[i] + " ");


public static void BubbleSort(int[] a) { for (int i = 1; i <= a.Length - 1; ++i) for (int j = 0; j < a.Length - i; ++j) if (a[j] > a[j + 1]) Swap(ref a[j], ref a[j + 1]); } public static void Swap(ref int x, ref int y) { int temp = x; x = y; y = temp; }


public static int[] BubbleSort(int[] arr) { int length = arr.Length(); while (length > 0) { int newLength = 0; for (int i = 1; i < length; i++) { if (arr[i - 1] > arr[i]) { Swap(ref arr[i - 1], ref arr[i]); newLength = i; } } length = newLength; } } public static void Swap(ref int x, ref int y) { int temp = y; y = x; x = temp; }


public void BubbleSortNum() { int[] a = {10,5,30,25,40,20}; int length = a.Length; int temp = 0; for (int i = 0; i <length; i++) { for(int j=i;j<length; j++) { if (a[i]>a[j]) { temp = a[j]; a[j] = a[i]; a[i] = temp; } } Console.WriteLine(a[i]); } }


static bool BubbleSort(ref List<int> myList, int number) { if (number == 1) return true; for (int i = 0; i < number; i++) { if ((i + 1 < number) && (myList[i] > myList[i + 1])) { int temp = myList[i]; myList[i] = myList[i + 1]; myList[i + 1] = temp; } else continue; } return BubbleSort(ref myList, number - 1); }


using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Practice { class Program { static void Main(string[] args) { Console.WriteLine("Enter the size"); int n = Convert.ToInt32(Console.ReadLine()); int[] mynum = new int[n]; Console.WriteLine("Enter the Numbers"); for (int p = 0; p < n;p++ ) { mynum[p] = Convert.ToInt32(Console.ReadLine()); } Console.WriteLine("The number are"); foreach(int p in mynum) { Console.WriteLine(p); } for (int i = 0; i < n;i++ ) { for(int j=i+1;j<n;j++) { if(mynum[i]>mynum[j]) { int x = mynum[j]; mynum[j] = mynum[i]; mynum[i] = x; } } } Console.WriteLine("Sortrd data is-"); foreach(int p in mynum) { Console.WriteLine(p); } Console.ReadLine(); } } }


int[] arr = { 800, 11, 50, 771, 649, 770, 240, 9 }; int temp = 0; for (int write = 0; write < arr.Length; write++) { for (int sort = 0; sort < arr.Length - 1 - write ; sort++) { if (arr[sort] > arr[sort + 1]) { temp = arr[sort + 1]; arr[sort + 1] = arr[sort]; arr[sort] = temp; } } } for (int i = 0; i < arr.Length; i++) Console.Write(arr[i] + " "); Console.ReadKey();


int[] arr = { 800, 11, 50, 771, 649, 770, 240, 9 }; for (int i = 0; i < arr.Length; i++) { for (int j = i; j < arr.Length ; j++) { if (arr[j] < arr[i]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } Console.ReadLine();


int[] array = new int[10] { 13, 2, 5, 8, 23, 90, 41, 4, 77, 61 }; for (int i = 10; i > 0; i--) { for (int j = 0; j < 9; j++) { if (array[j] > array[j + 1]) { int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } }