logo

빠른 정렬

Divide & Conquer 방식의 알고리즘입니다.

나누다: 요소를 재정렬하고 배열을 두 개의 하위 배열로 분할하고 그 사이의 요소를 검색하여 왼쪽 하위 배열의 각 요소가 평균 요소보다 작거나 같고 오른쪽 하위 배열의 각 요소가 중간 요소보다 큰지 검색합니다.

정복하다: 두 개의 하위 배열을 재귀적으로 정렬합니다.

결합하다: 이미 정렬된 배열을 결합합니다.

연산:

 QUICKSORT (array A, int m, int n) 1 if (n > m) 2 then 3 i ← a random index from [m,n] 4 swap A [i] with A[m] 5 o ← PARTITION (A, m, n) 6 QUICKSORT (A, m, o - 1) 7 QUICKSORT (A, o + 1, n) 

파티션 알고리즘:

파티션 알고리즘은 하위 배열을 한 장소에 재배열합니다.

 PARTITION (array A, int m, int n) 1 x &#x2190; A[m] 2 o &#x2190; m 3 for p &#x2190; m + 1 to n 4 do if (A[p] <x) 1 5 6 7 8 then o &larr; + swap a[o] with a[p] a[m] return < pre> <p> <strong>Figure: shows the execution trace partition algorithm</strong> </p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort.webp" alt="DAA Quick sort"> <h3>Example of Quick Sort: </h3> <pre> 44 33 11 55 77 90 40 60 99 22 88 </pre> <p>Let <strong>44</strong> be the <strong>Pivot</strong> element and scanning done from right to left</p> <p>Comparing <strong>44</strong> to the right-side elements, and if right-side elements are <strong>smaller</strong> than <strong>44</strong> , then swap it. As <strong>22</strong> is smaller than <strong>44</strong> so swap them.</p> <pre> <strong>22</strong> 33 11 55 77 90 40 60 99 <strong>44</strong> 88 </pre> <p>Now comparing <strong>44</strong> to the left side element and the element must be <strong>greater</strong> than 44 then swap them. As <strong>55</strong> are greater than <strong>44</strong> so swap them.</p> <pre> 22 33 11 <strong>44</strong> 77 90 40 60 99 <strong>55</strong> 88 </pre> <p>Recursively, repeating steps 1 &amp; steps 2 until we get two lists one left from pivot element <strong>44</strong> &amp; one right from pivot element.</p> <pre> 22 33 11 <strong>40</strong> 77 90 <strong>44</strong> 60 99 55 88 </pre> <p> <strong>Swap with 77:</strong> </p> <pre> 22 33 11 40 <strong>44</strong> 90 <strong>77</strong> 60 99 55 88 </pre> <p>Now, the element on the right side and left side are greater than and smaller than <strong>44</strong> respectively.</p> <p> <strong>Now we get two sorted lists:</strong> </p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-2.webp" alt="DAA Quick sort"> <p>And these sublists are sorted under the same process as above done.</p> <p>These two sorted sublists side by side.</p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-3.webp" alt="DAA Quick sort"> <br> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-4.webp" alt="DAA Quick sort"> <h3>Merging Sublists:</h3> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-5.webp" alt="DAA Quick sort"> <p> <strong> SORTED LISTS</strong> </p> <p> <strong>Worst Case Analysis:</strong> It is the case when items are already in sorted form and we try to sort them again. This will takes lots of time and space.</p> <h3>Equation:</h3> <pre> T (n) =T(1)+T(n-1)+n </pre> <p> <strong>T (1)</strong> is time taken by pivot element.</p> <p> <strong>T (n-1)</strong> is time taken by remaining element except for pivot element.</p> <p> <strong>N:</strong> the number of comparisons required to identify the exact position of itself (every element)</p> <p>If we compare first element pivot with other, then there will be 5 comparisons.</p> <p>It means there will be n comparisons if there are n items.</p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-6.webp" alt="DAA Quick sort"> <h3>Relational Formula for Worst Case:</h3> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-7.webp" alt="DAA Quick sort"> <h3>Note: for making T (n-4) as T (1) we will put (n-1) in place of &apos;4&apos; and if <br> We put (n-1) in place of 4 then we have to put (n-2) in place of 3 and (n-3) <br> In place of 2 and so on. <p>T(n)=(n-1) T(1) + T(n-(n-1))+(n-(n-2))+(n-(n-3))+(n-(n-4))+n <br> T (n) = (n-1) T (1) + T (1) + 2 + 3 + 4+............n <br> T (n) = (n-1) T (1) +T (1) +2+3+4+...........+n+1-1</p> <p>[Adding 1 and subtracting 1 for making AP series]</p> <p>T (n) = (n-1) T (1) +T (1) +1+2+3+4+........ + n-1 <br> T (n) = (n-1) T (1) +T (1) + <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-8.webp" alt="DAA Quick sort">-1</p> <p> <strong>Stopping Condition: T (1) =0</strong> </p> <p>Because at last there is only one element left and no comparison is required.</p> <p>T (n) = (n-1) (0) +0+<img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-8.webp" alt="DAA Quick sort">-1</p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-9.webp" alt="DAA Quick sort"> <p> <strong>Worst Case Complexity of Quick Sort is T (n) =O (n<sup>2</sup>)</strong> </p> <h3>Randomized Quick Sort [Average Case]:</h3> <p>Generally, we assume the first element of the list as the pivot element. In an average Case, the number of chances to get a pivot element is equal to the number of items.</p> <pre> Let total time taken =T (n) For eg: In a given list p 1, p 2, p 3, p 4............pn If p 1 is the pivot list then we have 2 lists. I.e. T (0) and T (n-1) If p2 is the pivot list then we have 2 lists. I.e. T (1) and T (n-2) p 1, p 2, p 3, p 4............pn If p3 is the pivot list then we have 2 lists. I.e. T (2) and T (n-3) p 1, p 2, p 3, p 4............p n </pre> <p>So in general if we take the <strong>Kth</strong> element to be the pivot element.</p> <p> <strong>Then,</strong> </p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-10.webp" alt="DAA Quick sort"> <p>Pivot element will do n comparison and we are doing average case so,</p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-11.webp" alt="DAA Quick sort"> <p> <strong>So Relational Formula for Randomized Quick Sort is:</strong> </p> <pre> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-12.webp" alt="DAA Quick sort"> = n+1 +<img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-13.webp" alt="DAA Quick sort">(T(0)+T(1)+T(2)+...T(n-1)+T(n-2)+T(n-3)+...T(0)) <br> = n+1 +<img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-13.webp" alt="DAA Quick sort">x2 (T(0)+T(1)+T(2)+...T(n-2)+T(n-1)) </pre> <pre> n T (n) = n (n+1) +2 (T(0)+T(1)+T(2)+...T(n-1)........eq 1 </pre> <p>Put n=n-1 in eq 1</p> <pre> (n -1) T (n-1) = (n-1) n+2 (T(0)+T(1)+T(2)+...T(n-2)......eq2 </pre> <p>From eq1 and eq 2</p> <p>n T (n) - (n-1) T (n-1)= n(n+1)-n(n-1)+2 (T(0)+T(1)+T(2)+?T(n-2)+T(n-1))-2(T(0)+T(1)+T(2)+...T(n-2)) <br> n T(n)- (n-1) T(n-1)= n[n+1-n+1]+2T(n-1) <br> n T(n)=[2+(n-1)]T(n-1)+2n <br> n T(n)= n+1 T(n-1)+2n</p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-14.webp" alt="DAA Quick sort"> <p>Put n=n-1 in eq 3</p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-15.webp" alt="DAA Quick sort"> <p>Put 4 eq in 3 eq</p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-16.webp" alt="DAA Quick sort"> <p>Put n=n-2 in eq 3</p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-17.webp" alt="DAA Quick sort"> <p>Put 6 eq in 5 eq</p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-18.webp" alt="DAA Quick sort"> <p>Put n=n-3 in eq 3</p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-19.webp" alt="DAA Quick sort"> <p>Put 8 eq in 7 eq</p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-20.webp" alt="DAA Quick sort"> <br> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-21.webp" alt="DAA Quick sort"> <p>From 3eq, 5eq, 7eq, 9 eq we get</p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-22.webp" alt="DAA Quick sort"> <br> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-23.webp" alt="DAA Quick sort"> <p>From 10 eq</p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-24.webp" alt="DAA Quick sort"> <p>Multiply and divide the last term by 2</p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-25.webp" alt="DAA Quick sort"> <p> <strong>Is the average case complexity of quick sort for sorting n elements.</strong> </p> <p> <strong>3. Quick Sort [Best Case]:</strong> In any sorting, best case is the only case in which we don&apos;t make any comparison between elements that is only done when we have only one element to sort.</p> <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-26.webp" alt="DAA Quick sort"> <hr></h3></x)>

허락하다 44피벗 요소 및 스캔이 오른쪽에서 왼쪽으로 수행됨

비교 44 오른쪽 요소에, 오른쪽 요소가 더 작은 ~보다 44 , 그런 다음 교체하세요. 처럼 22 보다 작다 44 그러니 교환하세요.

 <strong>22</strong> 33 11 55 77 90 40 60 99 <strong>44</strong> 88 

이제 비교 44 왼쪽 요소에 요소가 있어야합니다. 보다 큰 44보다 크면 교환하세요. 처럼 55 보다 크다 44 그러니 교환하세요.

 22 33 11 <strong>44</strong> 77 90 40 60 99 <strong>55</strong> 88 

피벗 요소에서 하나 왼쪽에 두 개의 목록을 얻을 때까지 재귀적으로 1단계와 2단계를 반복합니다. 44 & 피벗 요소 오른쪽에 하나.

 22 33 11 <strong>40</strong> 77 90 <strong>44</strong> 60 99 55 88 

77로 교체:

 22 33 11 40 <strong>44</strong> 90 <strong>77</strong> 60 99 55 88 

이제 오른쪽과 왼쪽의 요소는 다음보다 크고 작습니다. 44 각기.

이제 두 개의 정렬된 목록을 얻습니다.

DAA 퀵 정렬

그리고 이러한 하위 목록은 위와 동일한 프로세스로 정렬됩니다.

이 두 개의 하위 목록은 나란히 정렬되어 있습니다.

DAA 퀵 정렬
DAA 퀵 정렬

하위 목록 병합:

DAA 퀵 정렬

정렬된 목록

최악의 경우 분석: 항목이 이미 정렬된 형식이어서 다시 정렬을 시도하는 경우입니다. 이를 위해서는 많은 시간과 공간이 필요합니다.

방정식:

 T (n) =T(1)+T(n-1)+n 

티 (1) 피벗 요소에 걸리는 시간입니다.

티(n-1) 피벗 요소를 제외한 나머지 요소에 소요되는 시간입니다.

N: 자신(모든 요소)의 정확한 위치를 식별하는 데 필요한 비교 횟수

첫 번째 요소 피벗을 다른 요소와 비교하면 5번의 비교가 발생합니다.

n개의 항목이 있으면 n개의 비교가 수행된다는 의미입니다.

DAA 퀵 정렬

최악의 경우에 대한 관계식:

DAA 퀵 정렬

참고: T(n-4)를 T(1)로 만들기 위해 '4' 자리에 (n-1)을 넣을 것입니다.
4 대신 (n-1)을 넣은 다음 3 대신 (n-2)를 넣고 (n-3)을 넣어야 합니다.
2 대신에.

T(n)=(n-1) T(1) + T(n-(n-1))+(n-(n-2))+(n-(n-3))+(n-( n-4))+n
T(n) = (n-1) T(1) + T(1) + 2 + 3 + 4+...........n
T(n) = (n-1) T(1) +T(1) +2+3+4+...........+n+1-1

[AP 시리즈 제작을 위해 1을 더하고 1을 뺍니다]

T (n) = (n-1) T (1) +T (1) +1+2+3+4+........ + n-1
T(n) = (n-1) T(1) +T(1) + DAA 퀵 정렬-1

정지 조건: T (1) =0

결국에는 요소가 하나만 남고 비교가 필요하지 않기 때문입니다.

T (n) = (n-1) (0) +0+ DAA 퀵 정렬-1

DAA 퀵 정렬

퀵 정렬의 최악의 경우 복잡도는 T(n) =O(n2)

무작위 빠른 정렬 [평균 사례]:

일반적으로 목록의 첫 번째 요소를 피벗 요소로 가정합니다. 평균적인 경우 피벗 요소를 얻을 수 있는 기회의 수는 항목 수와 같습니다.

 Let total time taken =T (n) For eg: In a given list p 1, p 2, p 3, p 4............pn If p 1 is the pivot list then we have 2 lists. I.e. T (0) and T (n-1) If p2 is the pivot list then we have 2 lists. I.e. T (1) and T (n-2) p 1, p 2, p 3, p 4............pn If p3 is the pivot list then we have 2 lists. I.e. T (2) and T (n-3) p 1, p 2, p 3, p 4............p n 

그래서 일반적으로 우리가 K번째 요소가 피벗 요소가 됩니다.

그 다음에,

DAA 퀵 정렬

피벗 요소는 n개 비교를 수행하며 평균 사례를 수행합니다.

DAA 퀵 정렬

따라서 무작위 퀵 정렬의 관계식은 다음과 같습니다.

 <img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-12.webp" alt="DAA Quick sort"> = n+1 +<img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-13.webp" alt="DAA Quick sort">(T(0)+T(1)+T(2)+...T(n-1)+T(n-2)+T(n-3)+...T(0)) <br> = n+1 +<img src="//techcodeview.com/img/daa-tutorial/50/quick-sort-13.webp" alt="DAA Quick sort">x2 (T(0)+T(1)+T(2)+...T(n-2)+T(n-1)) 
 n T (n) = n (n+1) +2 (T(0)+T(1)+T(2)+...T(n-1)........eq 1 

방정식 1에 n=n-1을 넣습니다.

 (n -1) T (n-1) = (n-1) n+2 (T(0)+T(1)+T(2)+...T(n-2)......eq2 

eq1과 eq 2로부터

n T(n) - (n-1) T(n-1)= n(n+1)-n(n-1)+2 (T(0)+T(1)+T(2)+? T(n-2)+T(n-1))-2(T(0)+T(1)+T(2)+...T(n-2))
n T(n)-(n-1) T(n-1)= n[n+1-n+1]+2T(n-1)
n T(n)=[2+(n-1)]T(n-1)+2n
n T(n)= n+1 T(n-1)+2n

J E S T
DAA 퀵 정렬

방정식 3에 n=n-1을 넣습니다.

DAA 퀵 정렬

3eq에 4eq를 넣어보세요

DAA 퀵 정렬

방정식 3에 n=n-2를 넣습니다.

DAA 퀵 정렬

5eq에 6eq를 넣어주세요

DAA 퀵 정렬

방정식 3에 n=n-3을 넣습니다.

DAA 퀵 정렬

7eq에 8eq를 넣어보세요

DAA 퀵 정렬
DAA 퀵 정렬

3eq, 5eq, 7eq, 9eq로부터 우리는 다음을 얻습니다.

DAA 퀵 정렬

10eq부터

마지막 항에 2를 곱하고 나눕니다.

n개의 요소를 정렬하기 위한 퀵 정렬의 평균 사례 복잡성입니다.

3. 빠른 정렬 [최상의 경우]: 어떤 정렬에서든 가장 좋은 경우는 정렬할 요소가 하나만 있을 때만 수행되는 요소 간 비교를 수행하지 않는 유일한 경우입니다.