Array.prototype.quickSort = function() {
const rec =(arr) =>{
if(arr.length === 1){return arr}
// 分别存放 前后的数组
const left = []
const right = []
// 设置一个基准
const mid = arr[0]
//进行分区
for(let i =1; i<arr.length; i+=1){
if(arr[i] < mid){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
return [...rec(left),mid,...rec(right)] //...用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中
}
const res = rec(this)
res.forEach((n,i)=>{this[i] = n})
}
const arr = [ 5,4,3,2,1,6,9,8,7]
arr.quickSort()
console.log(arr)
クイックソートのスペースの複雑さは何ですか?
主な理由は、再帰によって引き起こされるスタックスペースの使用です。最良の場合、再帰ツリーの深さはlog2nです。
スペースの複雑さはO(logn)です
最悪の場合、
n-1の再帰呼び出しを行う必要があり、そのスペースの複雑さはO(n)です。
平均、
スペースの複雑さもO(logn)です。
時間計算量の最良および最悪のケースは何ですか?また、最適化ソリューションは何ですか?
最適な条件下で
クイックソートアルゴリズムの時間計算量はO(nlogn)です。
最悪の場合、
ソートされるシーケンスは正または逆の順序です。各ディビジョンは、前のディビジョンより1つ少ないレコードを持つサブシーケンスのみを取得します。もう一方は空であることに注意してください。再帰ツリーを描画すると、斜めツリーになります。
このとき、n-1回の再帰呼び出しを行う必要があり、i番目の分割ではピボットの位置であるi番目のレコードを見つけるためにn-i個のキーワードの比較が必要になるため、比較の数は次のようになります。
最後に、その時間計算量はO(n ^ 2)です。
時間計算量の最適化:3つを取り除く方法を
使用すると、最悪の場合に時間計算量を効果的に減らすことができます。3つの意味は、ピボット値をA [low]、A [(low + high)/ 2]、およびA [high]の中間値に設定することです。
========================
わからない答えを正しく整理するだけです