快速排序js實現

2021-09-11 14:23:35 字數 1314 閱讀 2329

書中先講了乙個小案例,如果將一塊長方形土地均勻分成方塊,且分出的方塊要盡可能大

兩個要點:

案例分析 基線條件:一條邊是另一條邊的整數倍 遞迴條件:長邊整除短邊劃出區域,剩餘區域繼續呼叫基線條件和遞迴條件

答案:1680 * 640的土地,按短邊整數倍長分出2640640的區域,剩餘區域為640400; 第二步分出240240區域,剩餘區域為240160;第三步分出160160區域,剩餘區域為160*80;因為160為80整數倍,所以可均勻分出的方塊邊長為80

ps: 該結論可搜尋歐幾里得演算法

快速排序

對於[33, 15, 10]這種陣列應該怎麼做呢? 首先,從陣列種選擇乙個元素,這個元素被稱為基準值(pivot) 然後根據剩餘元素對比基準值,可分成小於基準值的陣列和大於基準值的陣列(遞迴條件) 最後,將兩個陣列再用此方法排序,直到滿足基線條件,將兩個陣列和基準值相結合 得到[15, 10], 33,, 再將[15, 10]做排序得[10], 15,相結合得[10, 15, 33]

案例分析 基線條件:陣列長度小於2 遞迴條件:選擇其中乙個元素作為基準值,與剩餘元素比對,分割成小於和大於兩個陣列

答案(js版本):

function

qsort(arr)

return qsort(less).concat([pivot]).concat(qsort(greater));

}複製**

快速排序最壞情況時間複雜度為o(n^2) 當基準值為第乙個元素時,輸入乙個有序陣列,其呼叫棧數為o(n),每次呼叫棧時間為o(n),其時間複雜度為o(n) * o(n) = o(n ^ 2)

改良

function

qsort(arr)

return qsort(less).concat([pivot]).concat(qsort(greater));

}複製**

改良v2 對於有重複資料的陣列,快排也對這部分資料進行了排序,其實這是沒有必要的

function

qsort(arr)

return qsort(less).concat(equal).concat([pivot]).concat(qsort(greater));

}複製**

js實現快速排序

快排思想 1 在資料集之中,選擇乙個元素作為 基準 pivot 2 所有小於 基準 的元素,都移到 基準 的左邊 所有大於 基準 的元素,都移到 基準 的右邊。var quicksort function arr var pivotindex math.floor arr.length 2 var ...

js實現快速排序

快速排序主要用到的是遞迴和分治的思想當資料量比較大時,快排無疑是最好的選擇。對於公升序來講,大體思路是,首先我們定義左邊指標為i,最右邊為j,然後選最左邊的數字作為參照,然後從右邊往左邊搜尋,直到找到比參照數小的,然後將這個數字賦給i指標所在位置,再從左往右搜尋直到找到比參照大的,然後將這個數賦給j...

js實現快速排序

var quicksort function arr var pivotindex math.floor arr.length 2 取基準點 var pivot arr.splice pivotindex,1 0 取基準點的值,splice index,1 函式可以返回陣列中被刪除的那個數 var ...