Показать сообщение отдельно
  #1 (permalink)  
Старый 13.01.2013, 14:24
Интересующийся
Отправить личное сообщение для icqprophet Посмотреть профиль Найти все сообщения от icqprophet
 
Регистрация: 13.01.2013
Сообщений: 10

Реализация пирамидальной сортировки
Доброго времени суток.
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 ума не приложу.

Заранее спасибо!.
Ответить с цитированием