Tipo de burbuja simple c #

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[sort + 1]) { temp = arr[sort + 1]; arr[sort + 1] = arr[sort]; arr[sort] = temp; } } Console.Write("{0} ", arr[write]); } 

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

Aquí se muestra lo que se muestra: 11, 50, 649, 9, 649, 770, 771, 800

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

    No, tu algoritmo funciona pero tu operación de Write está fuera de lugar dentro del ciclo 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(); 

    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; } 
     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; } 

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

    considere lo que sucederí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] + " "); 
     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(); 

    Su Console.Write("{0} ", arr[write]); es muy temprano Está imprimiendo los valores mientras el género aún está en progreso . Por ejemplo, está imprimiendo 9 como el índice 3 en la matriz, pero en la siguiente iteración del ciclo el 9 se movió al índice 2 y 240 se movió al índice 3 … pero su bucle externo se ha movido hacia adelante para que imprima 649 la segunda vez y 240 nunca se imprima.

     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; } } } 
      static bool BubbleSort(ref List 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); } 

    Solo otro ejemplo pero con un bucle OUT WHILE 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++; } } } 
     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; } 
      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;jmynum[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 }; 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(); 
      public void BubbleSortNum() { int[] a = {10,5,30,25,40,20}; int length = a.Length; int temp = 0; for (int i = 0; i a[j]) { temp = a[j]; a[j] = a[i]; a[i] = temp; } } Console.WriteLine(a[i]); } }