[アルゴリズム]第5週第2回運転時
6914 ワード
Chap04. Sorting
Quick-Sort :: O(nlgnnlgnnlgn)
In-placeアルゴリズム:少ないスペースを占有する
O(1)spaceを使用しますが、戻りはO(lgn)
Algorithm inPlaceQuickSort(S, l, r) // preorder traversal
/* Input: sequence S, ranks l and r
Output sequence S with the
elements of rank between l and r
rearranged in increasing order */
if l >= r
return
i <- a random integer between l and r
x <- S.elemAtRank(i)
(h, k) <- inPlacePartition(x) // visit()
inPlaceQuickSort(S, l, h-1) // L
inPlaceQuickSort(S, k+1, r) // G
pivot = 6
L, E U G
jとkが出会うまで次の3つのステップを繰り返します
1.jを使用してpivot以上の値を検索
2.kを使用してpivot未満の値を検索
3.2つのインデックスjとkを
Merge sort :: O(nlgnnlgnnlgn)
- Problem
昇順に配列する2つのシーケンスA,Bが与えられると、
並べ替えられたシーケンスCにマージ
- Strategy
Sequence AとBの一番左の値を比較し、より小さい値をsequence Cの
Merge(A, B, C)
if (A is empty)
rest of C = rest of B
else if (B is empty)
rest of C = rest of A
else if (first of A ≤ first of B)
first of C = first of A
Merge (rest of A, B, rest of C)
else
first of C = first of B
Merge (A, rest of B, rest of C)
return
W(n)=n-1(最後に比較x)-input:array Eとfirst,last
void mergeSort(Element[] E, int first, int last) // postorder traversal
if (first < last)
int mid = (first+last)/2;
mergeSort(E, first, mid); // left
mergeSort(E, mid+1, last); // right
merge(E, first, mid, last); // visit()
return;
Optimal Algorithm
* Quick-Sort Algorithm : Divide and Conquer
* Merge sort Algorithm : Combine and Conquer
Reference
この問題について([アルゴリズム]第5週第2回運転時), 我々は、より多くの情報をここで見つけました https://velog.io/@dkswlgus00/알고리즘-5주차-2차시テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol