一、冒泡排序
1思路:
冒泡排序思路:每一次對比相鄰兩個數據的大小,小的排在前面,如果前面的數據比後面的大就交換這兩個數的位置
要實現上述規則需要用到兩層for循環,外層從第一個數到倒數第二個數,內層從外層的後面一個數到最後一個數
2特點:排序算法的基礎。簡單實用易於理解,缺點是比較次數多,效率較低
3代碼實現
var a = [3,7,11,43,87,5,99,22,51,8];
var n = a.length-1;
for (var i=1; i<=a.length-1;i++) {
for (var j=0; j<=n; j++) {
//不滿足升序就對調
if (a[j] > a[j + 1]) {
var flag = a[j];
a[j] = a[j + 1];
a[j + 1] = flag;
}
}
n--;
}
alert(a.toString());
二、折半查找
1思路:
折半查找思路:
(1)用start表示查找範圍的起點,end表示查找範圍的終點
(2)只要start<=end 就重複一下步驟3
(3)和中間位置(mid)的那個數進行比較
1)相等:找到了,結束
2)大於:在前半段找,即end = mid -1
3)小於:在後半段找,即start = mid + 1
(4)輸出結果
2特點:折半查找的最壞查找次數與數據量的關係是對數關係,所以說它的查找效率是很高的,但是任何事情往往都有兩面性,它的高效率也是有高代價的,也就是要求有序。
3代碼實現
var a = [3,5,7,8,11,22,43,51,87,99];
var num = Number(prompt("請輸入要查找的值"));
var index = -1;//最初認爲要找的數不在數組中
var start = 0;
var end = a.length - 1;
while(start <= end){
var mid = Math.ceil((start+end )/2);//計算中間位置
if(num == a[mid]){
index = mid;
break;
}else {
if(num > a[mid]){
//在後半段找
start = mid + 1;
}else{
//在前半段找
end = mid - 1;
}
}
}
alert(index);
三:總結
兩種方法各有優缺點,但是這兩種方法作爲程序員必須掌握,因爲一種是最基礎的,另一種是最常用的,面試或者日常都會碰到。