プロジェクトはその後、徹底的に分析するために、初めて(たぶん忘れ、前に学んだ)このアルゴリズムを参照するために、私は非常に興味深い感じ、アルゴリズムを見て眠く見るために文書を見て、棚上げされました。
最初のステップは、最初の数式トラバーサル(ここでは、他の時間のかかる操作が唯一の時間のかかる操作トラバーサルではないことを仮定して)の数に後退で、2つのクイックソートに分かれています。
次いで、ランクの数は、通常のn * n-1の横断する、トラバースの数は2つに分割され、N + M×(M - 1)+(N - M - 1)×(N - M - 2)1 <M < n]は、
後で、この式を説明する、N Mは、最初のセグメントの長さを表し、二段階の通常ソートの後ろの前にパケットです。
(N * N-1) - (N + M×(M - 1)+(N - M - 1)×(N - M - 2)1 <M <N)= Mの* M - 2 *( N - 1)*(M + 2)
この式は、それほどのコードで右または直接、話すこと、苦いと難しいの周りああ周りを導き出すことを証明していない、ゼロ未満である一定のようだが、ここでは他の時間のかかる操作を無視します:
「パフォーマンス・今」から今の輸入; ソートする配列を生成// CONSTをoriginArray = []; constの最大= 10; (; K <マックス; K = 0をkを++){ため originArray [K] = Math.floor(Math.random()* MAX)+ 1。 } はconsole.log( "起源アレイ"、JSON.stringify(originArray))。 console.log(); constのLEN = originArray.length。 normalSort = []、クイックソート= []、normalTimes = 0、quickTimes = 0ましょう。 今のvar T0 =(); //通常のソート方法 normalSort = Array.from(originArray)。 {(; iがLEN <I ++は、I = 0せて)ため (J = I + 1せ; J <LEN; J ++){ため normalTimes ++。 IF(normalSort [I] <normalSort [J]){ TEMP = normalSort [I]をましょう。 normalSort [I] = normalSort [J]。 normalSort [J] = TEMP。 } } } 今のvar T1 =(); //クイックソート方法 CONST半= Math.floor(LEN / 2)。 rightPartを聞かせて= []; 以下のために(; iはi = 0させ<LEN; iは++){ IF(originArray [I]> originArray [半]){ quickSort.push(originArray [I])。 }他{ rightPart.push(originArray [I])。 } } CONST splitLen = quickSort.length。 クイック= quickSort.concat(rightPart)。 {(; iがsplitLenを<I ++は、I = 0せて)ため (J = I + 1せ; J <splitLen; J ++){ため quickTimes ++。 IF(クイック[I] <クイック[J]){ 聞かせて温度=クイックソート[i]は、 クイック[I] =クイック[J]。 クイック[J] = TEMP。 } } } {(; iがLEN <I ++は、I = splitLenを聞かせて)ため (J = I + 1せ; J <LEN; J ++){ため quickTimes ++。 IF(クイック[I] <クイックソートは、[J]){ せTEMP =クイック[I]。 クイック[I] =クイック[J]。 クイック[J] = TEMP。 } } } 今のvar T2 =(); console.log( "ノーマルソート結果"、JSON.stringify(normalSort)); console.log( "クイックソート結果"、JSON.stringify(クイックソート)); console.log(); ; -にconsole.log(T0)+ "ミリ秒のループ回数" + normalTimes +(T1 "をNormalSortがかかりました") ; -にconsole.log(T1)+ "ミリ秒ループ回数" + quickTimes +(T2を"クイックソートがかかりました")
以下は、配列の長さ10、100、...実行時間に相当します。
1000年、別に、わかるように少し遅い、他の回では、速度の利点は明らかであるとき。