Что-то не так с этим кодом сортировки пузырьков? - PullRequest
0 голосов
/ 26 мая 2011
function algBubble(input:Array):Array{  
var changed:Boolean=true;

while(changed==true){

    changed=false;

    for(var i:int=0; i<input.length-1; i++){

        if(input[i]>input[i+1]){

            var temp:int=input[i];
            input[i]=input[i+1];
            input[i+1]=temp;

            changed==true;
        }
    }
}   
return input;
}

Кажется, он проходит через массив только один раз, оставляя его в основном несортированным.

Ответы [ 4 ]

4 голосов
/ 26 мая 2011

Изменить эту строку

changed==true;

до

changed=true;
1 голос
/ 26 мая 2011

Пузырьковая сортировка - один из самых медленных алгоритмов сортировки.

Вы можете сортировать что угодно, используя встроенную функцию Array.sort, более подробную информацию об этом здесь

Вы можете сделать это следующим образом:

        var test:Array = [5,3,6];

        private function sortArrays():void{
            test.sort(compareFunction);
            trace(test);//will output 3,5,6
        }

        function compareFunction(a:Number, b:Number):Number { 
            if (a<b) { 
                return -1; 
            } else if (a>b) { 
                return 1; 
            } else { 
                return 0; 
            } 
        } 

Приветствия

1 голос
/ 26 мая 2011

Я предлагаю вам изменить:

changed==true;

до:

changed = true;

Первый выполняет сравнение и выбрасывает его, второй фактически устанавливает changed на true, чтобы указать, что своп был выполнен.

Кроме этой маленькой проблемы, все остальное выглядит хорошо.

0 голосов
/ 26 мая 2011

У вас есть опечатка: changed==true должно быть changed=true

...