2016-06-14 12 views
1

Ich habe einen Blasensortieralgorithmus (sorta) mit JS gemacht. Es funktioniert manchmal, aber das Problem ist, dass es nur einmal durch das Array iteriert. Hier ist mein Code:Javascript: Bubble Sort

function bubble(arr) { 
    for (var i = 0; i < arr.length; i++) { 
    if (arr[i] > arr[i + 1]) { 
     var a = arr[i] 
     var b = arr[i + 1] 
     arr[i] = b 
     arr[i + 1] = a 
    } 
    } 
    return arr; 
} 
+2

Und wie glaubst du, du könntest es wieder durch das Array laufen lassen? Unter welchen Bedingungen sollte es aufhören? –

+0

Das ist, was ich habe Probleme mit :( –

+0

Bitte beachten Sie die [Pseudocode-Implementierungen in Wikipedia] (https://en.wikipedia.org/wiki/Bubble_sort): Sie brauchen Schleife kontinuierlich, bis eine Bedingung erfüllt ist (keine Swaps In JavaScript bedeutet das möglicherweise ein großes 'while()' über Ihrem Code. –

Antwort

0

Sie benötigen eine innere Schleife, die Art richtig abzuschließen:

function bubble(arr) { 
 
     var len = arr.length; 
 
    
 
     for (var i = 0; i < len ; i++) { 
 
     for(var j = 0 ; j < len - i - 1; j++){ // this was missing 
 
     if (arr[j] > arr[j + 1]) { 
 
      // swap 
 
      var temp = arr[j]; 
 
      arr[j] = arr[j+1]; 
 
      arr[j + 1] = temp; 
 
     } 
 
     } 
 
     } 
 
     return arr; 
 
    } 
 

 
document.write(bubble([1,9,2,3,7,6,4,5,5]));

+0

Bitte erklären Sie die innere Schleife, warum wird sie benötigt? –

1

Bitte schauen Sie auf der folgenden Reihenfolge:

[5, 4, 3, 2, 1] 

Nehmen wir an, Sie müssen dies in aufsteigender Reihenfolge mit bubbl sortieren Ich sortiere.

Sie iterieren also das Array und tauschen benachbarte Elemente aus, die anders angeordnet sind.

Hier ist, was Sie nach dem Abschluss der Iteration

[4, 3, 2, 1, 5] 

Nun, wenn Sie diese ein weiteres Mal tun bekommen, werden Sie diese:

[3, 2, 1, 4, 5] 

Ebenso Sie das wiederholen müssen Iteration genug, um es vollständig sortiert zu bekommen. Dies bedeutet, dass Sie 2 verschachtelte Schleifen benötigen. Die innere Schleife soll das Array iterieren und die äußere Schleife soll die Iteration wiederholen.

Bitte beachten Sie die Schritt-für-Schritt-Beispiel von this Artikel.

1

My Blasensortierung mit nur einer while-Schleife:

function bubbleSort(arr){ 
    var sorted = false 
    while (!sorted){ 
    sorted = true; 
    arr.forEach(function (element, index, array){ 
     if (element > array[index+1]) { 
     array[index] = array[index+1]; 
     array[index+1] = element; 
     sorted = false; 
     } 
    }); 
    } 
} 
0
function bubble(arr) {//You need Two Loops for Bubble sort 
    for (var i = 0; i < arr.length; i++) {//Outer Loop 
    for(var j=0; j < arr.length - 1; j++){//Inner Loop 
    if (arr[j] > arr[j + 1]) { 
     var a = arr[j] 
     var b = arr[j + 1] 
     arr[j] = b 
     arr[j + 1] = a 
    } 
    } 
    } 
    return arr; 
} 
0

Eine andere Form der Blasensortierung umfasst am Ende des Arrays beginnt und das kleinste Element Platzieren erste und geht bis zum größten. Dies ist der Code:

function bubbleSort(items) { 
    var length = items.length; 
    for (var i = (length - 1); i >= 0; i--) { 
     //Number of passes 
     for (var j = (length - i); j > 0; j--) { 
      //Compare the adjacent positions 
      if (items[j] < items[j - 1]) { 
       //Swap the numbers 
       var tmp = items[j]; 
       items[j] = items[j - 1]; 
       items[j - 1] = tmp; 
      } 
     } 
    } 
} 

Hinweis Blase Art ist eine der langsamsten Sortieralgorithmen.

Verwandte Themen