Доброго времени суток.
Javascript изучаю сравнительно недавно, поэтому не шарю, может кто подсказать:
- почему нижеследующий код виснет как только доходит до *Основного блока программы*
- мб кто поможет реализовать отрисовку пирамид на каждом 2-3 шаге сортировки?
Да и по всей видимости проблемы с выводом.
/*------Задаем длину массива------*/
var arrayLength = prompt('Введите длину массива', 10);
var arr = [];
//alert(arr.length);
/*------*****************------*/
/*------Заполняем массив------*/
for (var i=0; i<arrayLength; i++) {
var newElemArray = prompt('Введите '+(i+1)+' число массива', 0);
arr.push(newElemArray);
}
alert(arr);
/*------****************------*/
/*------Функция сортировки------*/
function swap (n1, n2) {
var temp, num1, num2;
temp = num1;
num1 = num2;
num2 = temp;
}
/*------****************------*/
/*------Основное тело программы------*/
var shift = 0;
var b = false;
for (;;) {
b = false;
for (var i=0; i<arrayLength; i++) {
if (i*2+2+shift<arrayLength) {
if ((arr[i + shift] > arr[i*2+1+shift]) || (arr[i+shift] > arr[i*2+2+shift])) {
if (arr[i*2+1+shift] < arr[i*2+2+shift]) {
swap(arr[i*2+1+shift],arr[i*2+2+shift]);
b = true;
} else if (arr[i*2+2+shift] < arr[i+2+1+shift]) {
}
}
}
}
if( arr[i*2 + 2 + shift] < arr[i*2 + 1 + shift] ) {
swap( arr[i*2+1+shift], arr[i * 2 +2+ shift] );
b = true;
} else if( i * 2 + 1 + shift < arrayLength ) {
if( arr[i + shift] > arr[ i * 2 + 1 + shift] ) {
swap( arr[i + shift], arr[i * 2 + 1 + shift] );
b = true;
}
}
}
if (!b) shift++; //смещение увеличивается, когда на текущем этапе сортировать больше нечего
if (shift+2==arrayLength) return 0; alert('Конец осртировки');
alert(arr);
Почему JS? потому что интересно).. на с++ альтернативный код пашет. Как реализовать нечто подобное на JS ума не приложу.
Заранее спасибо!.