js 學習總結:冒泡排序的實現以及Array.prototype.sort 的簡易實現

冒泡排序

每次循環,比較當前位置項與下一個位置項的大小,如果當前項 > 后一項,則交換兩者的位置。每次循環比較都能選擇出一個最大值,放在末尾,剩余待篩選的比較項就減少一項。
如果數組存在n項,那么需要循環執行篩選的次數為n次

/**
 * 優化冒泡排序 
 * flag 做標記
  
 * @param {*} arr 
 */

function bubbleSort(arr){

    for(let i=0;i<arr.length;i++)
    {
        //標記
        let flag=true;
        for(let j=0;j<arr.length-i-1;j++)
        {
            if(arr[j]>arr[j+1])
            {
                flag=false;
                //前一項大于后一項,交換位置
                //采用es6 解構
                [arr[j],arr[j+1]]=[arr[j+1],arr[j]];
                
            }
        }
        //本輪循環沒有交換位置,說明已經是一個有序數組
        if(flag) break;
    }
    return arr;

}

Array.prototype.sort 的簡易實現

**sort()** 方法用原地算法對數組的元素進行排序,并返回數組。默認排序順序是在將元素轉換為字符串,然后比較它們的UTF-16代碼單元值序列時構建的

const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort(); 
const array1 = [1, 30, 4, 21, 100000];
array1.sort(); // [1, 100000, 21, 30, 4]

詳細用法可點擊鏈接
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

下面依賴冒泡排序實現簡易版的Array.prototype.sort()


/**
 * 冒泡排序 
 * flag 做標記
 * @param {*} arr 
 * @param {*} func 
 */

function bubbleSort(arr,func){

    for(let i=0;i<arr.length;i++)
    {
        //標記
        let flag=true;
        for(let j=0;j<arr.length-i-1;j++)
        {
            if(func(arr[j],arr[j+1]))
            {
                flag=false;
                //前一項大于后一項,交換位置
                //采用es6 解構
                [arr[j],arr[j+1]]=[arr[j+1],arr[j]];
            }
        }
        //本輪循環沒有交換位置,說明已經是一個有序數組
        if(flag) break;
    }
    return arr;

}
/**
 * 在數組原型上自定義實現數組排序
 * 
 */
Array.prototype._sort=function (func) {
        
         if(typeof func!=='function')
         {
             func=(a,b)=>a-b
         }

       return  bubbleSort(this,func);
    
}
//使用
[3,0,3,2,5,90.89,64,98]._sort((a,b)=>a-b>0) //[0, 2, 3, 3, 5, 64, 90.89, 98]
[3,0,3,2,5,90.89,64,98]._sort((a,b)=>a-b<0) //[98, 90.89, 64, 5, 3, 3, 2, 0]
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。