js實現兩種排序算法——冒泡、快速排序


* 一:冒牌排序1思想:冒泡排序思想:每一次對比相鄰兩個數據的大小,小的排在前面,如果前面的數據比后面的大就交換這兩個數的位置
要實現上述規則需要用到兩層for循環,外層從第一個數到倒數第二個數,內層從外層的后面一個數到最后一個數
2特點:排序算法的基礎。簡單實用易於理解,缺點是比較次數多,效率較低。
    var   arr=[2,5,4,1,7,3,8,6,9,0];
    function arrayMax(arr) {
        var temp = null;
        for (var i = 0;i<arr.length-1;i++){
            for (var j = i+1;j<arr.length;j++){
                if (arr[i]>arr[j]){//如果前面的數據比后面的大就交換  兩個數交換一定要聲明一個變量,用來存儲其中要被賦值的那個
                    temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                }

            }
        }
        return arr;
    }
console.log(arrayMax(arr));
 
         
 
/**
*
* 二:快速排序

1思想:快速排序思想:先找到一個基准點(一般指數組的中部),然后數組被該基准點分為兩部分,依次與該基准點數據比較,如果比它小,放左邊;反之,放右邊。
左右分別用一個空數組去存儲比較后的數據。最后遞歸執行上述操作,直到數組長度<=1;

2特點:快速,常用。缺點是需要另外聲明兩個數組,浪費了內存空間資源
*
* ***/
    var times = 0;
    function queryArrayMax(arr) {
        //如果數組長度小於等於1無需判斷直接返回即可
        if (arr.length<=1){
            return arr;
        }
        var arrIndex = Math.floor(arr.length/2);//獲取中間值 這個是索引
        var arrCenterVal = arr.splice(arrIndex,1);// 利用索引取出中間值  改變原始數組
        var left= [],//存儲小的
            right = [];//存儲大的
       // 遍歷數組 ,進行判斷分配
       for (var i = 0;i<arr.length;i++){
           if (arr[i]<arrCenterVal){
                left.push(arr[i])//比中間值小的放在左邊數組
           }else{
               right.push(arr[i])//比中間值大的放在右邊數組
           }
           console.log("第"+(++times)+"次排序后:"+arr);
       }
        //遞歸執行以上操作,對左右兩個數組進行操作,直到數組長度為<=1;
       return queryArrayMax(left).concat(arrCenterVal,queryArrayMax(right))

    }
    console.log(queryArrayMax(arr));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM