js交換排序 冒泡排序演算法(Javascript版),jsjavascript
比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
針對所有的元素重複以上的步驟,除了最後一個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
function sort(elements){ for(var i=0;i<elements.length-1;i++){ for(var j=0;j<elements.length-i-1;j++){ if(elements[j]>elements[j+1]){ var swap=elements[j]; elements[j]=elements[j+1]; elements[j+1]=swap; } } }}var elements = [3, 1, 5, 7, 2, 4, 9, 6, 10, 8];console.log('before: ' + elements);sort(elements);console.log(' after: ' + elements);
效率:
時間複雜度:最好:O(n),最壞:O(n^2),平均:O(n^2)。
空間複雜度:O(1)。
穩定性:穩定。
javascript中的冒泡排序法
冒泡排序的原理是這樣的,比方說有五個數字54321,要按從小到大排列;
首先比較前兩個,就是5和4,如果第一個小於第二個,不做操作,如果第一個大於第二個,那麼交換二者的位置,即變成45321,然後比較第二個和第三個,交換位置,變成43521,然後第三個和第四個,第四個和第五個,這樣一次迴圈下來,變成43215
所以,一層迴圈的效果就是挑出最大的一個數字5,冒泡到最後面。但是還要挑出第二大,第三大的數字,等等。所以一層迴圈根本就不夠用,必須再套一層才行。像這個例子,五個數字,起碼要進行四輪迴圈才行。至於為什麼要this.length-i,是因為第一次比較五個數字,第二個只要比較前四個就行了,第五個肯定是最大的了。。
var array = [5, 4, 3, 2, 1];
var temp = 0;
for (var i = 0; i < array.length; i++)
{
for (var j = 0; j < array.length - i; j++)
{
if (array[j] > array[j + 1])
{
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
}
console.log(array);
javascript冒泡排序怎實現的
你想要什麼樣的結果?還是不理解。
比方 當1 小於2時,1和2交換位置;
當1小於3時,1和3交換位置;
所有的資料以此類推,才出現這樣的結果。