Javascript 氣泡排序

jiestyle21發表於2011-11-03

最基本的題目:一個陣列,未知長度,按從小到大的順序進行排列;現在用基本的氣泡排序方法進行排序!

一種思路是先把大的往後排,陣列呈逐步減少的狀態,排序的過程為:

i=0時,j=0,j<5,j++

8 3 6 1 -2

8 6 1 -2

3 6 8 1 -2

3 6 1 8 -2

3 6 1 -2 8

i=1時,j=0,j<4,j++

3 6 1 -2 8

6 1 -2 8

3 1 6 -2 8

3 1 -2 6 8

 

i=2時,j=0,j<3,j++

3 1 -2 6 8

3 -2 6 8

1 -2 3 6 8

 

i=3時,j=0,j<2,j++

1 -2 3 6 8

-2 1 3 6 8

 

i=4時,j=0,j<1,j++

-2 1 3 6 8

-2 1 3 6 8

 

具體的實現程式碼是:

var arr = [8,3,6,1,-2];  
var temp;  
var count=0;  
for(var i=0; i<arr.length; i++)  
{  
    for (var j = 0; j < arr.length-i; j++)   
    {  
        if (arr[j + 1] < arr[j])   
        {  
            temp = arr[j + 1];  
            arr[j + 1] = arr[j];  
            arr[j] = temp;  
            count++;  
            //alert("i:"+i+"j:"+j);  
        }  
    }  
}  
document.write(arr);  
document.write("總共迴圈了"+count);//9 
另外一種思路是把小的元素往前排,再比較的時候就比較剩下的元素就可以了,i=0先把-2給換到最前邊,i=1把1網籤拽,陣列就剩下8 3 6了 ,陣列就越來越小了!

var arr = [8,3,6,1,-2];  
var temp;  
var count=0;  
for(var i=0; i<arr.length; i++)  
{  
    for (var j =arr.length-1; j >= i; j--)   
    {  
        if (arr[j + 1] < arr[j])   
        {  
            temp = arr[j + 1];  
            arr[j + 1] = arr[j];  
            arr[j] = temp;  
            count++;              
        }  
        //alert("i:"+i+"j:"+j);  
    }  
}  
document.write(arr);  
document.write("總共迴圈了"+count);//9
當然這兩種思路都是冒泡法,5個不重複的元素,迴圈了9次


相關文章