實(shí)現(xiàn)冒泡排序 這是排序算法的第一個(gè)挑戰(zhàn)。給定一個(gè)未排序的數(shù)組,然后經(jīng)過排序返回一個(gè)有順序的數(shù)組。在接下來的算法挑戰(zhàn)中,我們將通過幾種不同的方法來實(shí)現(xiàn)排序,并在這些不同的方法之間學(xué)習(xí)一些權(quán)衡。雖然大多數(shù)現(xiàn)代語(yǔ)言都有內(nèi)置的這種操作的排序方法,但仍然需要了解一些常見的基本方法,并了解如何實(shí)現(xiàn)它們。 冒泡排序思想 在這里我們將看到冒泡排序。冒泡排序通過重復(fù)地走訪過要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。
該方法需要通過數(shù)組進(jìn)行多次迭代,平均和最差情況下都具有二次時(shí)間復(fù)雜度。 整形數(shù)組未排序前的順序如下: [42,20,17,13,28,14,23,15] 第一趟排序,我們從后一個(gè)元素15開始,不斷與之相鄰的元素進(jìn)行比較,如果比15大,則交換位置,如果比15小,就交換比較元素,第一趟之后,我們得到數(shù)組里的最小元素13,而且13也位于數(shù)組的第一個(gè)元素了,通過不斷的排序比較,在比較了數(shù)組長(zhǎng)度-1次以后,該數(shù)組的所有元素已經(jīng)根據(jù)大小排好順序了
var array = [];
(function createArray(size) {
array.push(+(Math.random() * 100).toFixed(0));
return (size > 1) ? createArray(size - 1) : undefined;
})(12);
function bubbleSort(array) {
// change code below this line
/*for (var i = 0; i <array.length-1; i++) {
for(var j=i+1;j<array.length;j++){
if (array[i]>array[j]) {
var temp;
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
}*/
for (var i = 0; i <array.length-1; i++) {
for(var j=0;j<array.length-1-i;j++){
if (array[j]>array[j+1]) {
var temp;
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
return array;
}
bubbleSort(array);
更多建議: