用JS實現冒泡排序、順序排序、 折半查找

一、冒泡排序

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);

三:總結

兩種方法各有優缺點,但是這兩種方法作爲程序員必須掌握,因爲一種是最基礎的,另一種是最常用的,面試或者日常都會碰到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章