Пузырчатая сортировка в JS. Помогите?

392
27 апреля 2017, 15:42

var array = new Array(8, 4, 2, 3, 6); 
 
document.write(array); 
 
b = 5; 
 
for (k = 0; k < b - 1; k++) { 
 
  swap = 0; 
 
  for (i = 0; i < b - k - 1; i++) { 
 
    if (array[i] > array[i + 1]) { 
      temp = array[i + 1]; 
      array[i + 1] = array[i]; 
      array[i] = temp; 
      swap++; 
    } 
  } 
  document.write(array[i] + " "); 
}

Вместо отсортированного списка выводит: 8 4 2 3 68 6 4 3.

Answer 1

Вывод отсортированного массива нужно производить после цикла и вместо явного указания размера массива лучше использовать свойство Length

var array = [8, 4, 2, 3, 6];
swap =0;
for (k = 0; k < array.Length; k++) { 
    for (i = 0; i < array.Length - k - 1; i++) { 
        if (array[i] > array[i + 1]) { 
            temp = array[i + 1]; 
            array[i + 1] = array[i]; 
            array[i] = temp; 
            swap++;
        }
    }
}
for (i=0;i<array.Length; i++) 
    document.write(array[i] + " ");
Answer 2

вместо отсортированного списка выводит:---> 8,4,2,3,68 6 4 3

ну так всё правильно, 8,4,2,3,6 это ваш первый вывод перед циклом document.write(array); и затем дальше пишется 8 6 4 3 вот этой строкой document.write(array[i] + " "); только поменяйте i на k - document.write(array[k] + " ");

И вообще лучше вывод делать за циклом. Сортировка и вывод это две логически разные операции, надо такое разделять.

Answer 3

Как совет: лучше написать функцию, которая будет сортировать и возвращать отсортированный массив, на мой взгляд так будет правильнее, можно будет использовать в дальнейшем. Смотреть, что получилось в результате - по завершению сортировки. Убрать неиспользуемую переменную swap. Пример рабочего кода:

var array = new Array(8, 4, 2, 3, 6); 
 
function BubbleSort(arr) { 
  var n = arr.length; 
  for (var i = 0; i < n - 1; i++) { 
    for (var j = 0; j < n - 1 - i; j++) { 
      if (arr[j + 1] < arr[j]) { 
        var temp = arr[j + 1]; 
        arr[j + 1] = arr[j]; 
        arr[j] = temp; 
      } 
    } 
  } 
} 
 
BubbleSort(array); 
 
for (index = 0; index < array.length; index++) 
  document.write(array[index] + " ");

Пузырьковая сортировка выполняет следующие действия: проход по массиву с обменом местами соседних элементов, нарушающих заданный порядок, до тех пор, пока массив не будет окончательно отсортирован.

Очень полезная ссылка: Алгоритмы сортировок на JavaScript