JS快速排序

Array.prototype.quickSort = function (left=0, right=this.length-1){
            var i = left,
                j = right,
                temp = this[left];//選擇左邊第一個(gè)為基數(shù)
            if(left > right){//如果left比right大則返回(異常處理)
                return;
            }
            while(i != j){//兩側(cè)指針相遇則結(jié)束
                while(i < j && this[j] >= temp){//從右向左看,依次和基數(shù)進(jìn)行比較
                    j --;//如果右側(cè)的比基數(shù)大,則不用交換,將j--判斷下一個(gè)
                }
                if(j > i){//出了上面的while循環(huán)且j!=i, 則證明this[j]比temp(基數(shù))小,需要進(jìn)行交換
                    this[i] = this[j];//因?yàn)閍rr[i]的內(nèi)容已經(jīng)賦值給了temp,所以可以直接把a(bǔ)rr[j]賦值給arr[i]
                }
                while(i < j && this[i] <= temp){////從左向右看,依次和基數(shù)進(jìn)行比較
                    i ++;//如果左側(cè)的比基數(shù)小,則不用交換,將i++判斷下一個(gè)
                }
                if(i < j){//出了上面的while循環(huán)且j!=i 則證明this[i]比temp(基數(shù))大,需要進(jìn)行交換
                    this[j] = this[i];//因?yàn)閍rr[j]的內(nèi)容已經(jīng)賦值給了arr[i],所以這個(gè)位置空了,可以直接把a(bǔ)rr[i]賦值給arr[j]
                }
            }
            this[i] = temp;//i j相等,將基數(shù)放回
            this.quickSort(left, i-1);//基數(shù)左邊再進(jìn)行排序
            this.quickSort(i+1, right);//基數(shù)右邊再進(jìn)行排序
            return this;
        }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容