快速排序的解釋
回答
繼續.. [*藍色指針; **紅色指針; ***空置] 樞軸= 57
=> 24 49 16 38 55 21 36 *68 7 **9 81 85 63 79 74 85 97 61 77 70 ***
=> 24 49 16 38 55 21 36 *9 7 **68 81 85 63 79 74 85 97 61 77 70 ***
我期望的那樣,他們是因爲它是東西,直到這將是明顯的。 9和68交換。現在右端小於57的下一個數字是7(所以**),大於它的數字是68(so *)。
=> 24 49 16 38 55 21 36 9 **7 *68 81 85 63 79 74 85 97 61 77 70 ***
但由於索引將不進一步滿足條件,因此與紅色指針68的數量將被移動到空閒空間和57到其處於中間位置。因此,順序應該是:
=> 24 49 16 38 55 21 36 9 **7 *57 81 85 63 79 74 85 97 61 77 70 ***68
你能否像我在幻燈片中解釋過的那樣解釋我?我猜想順序會是這樣的,但是怎麼樣? – OnePunchMan
@Tootsie_Roll編輯答案...雖然沒有圖表,但試圖提供更好的視覺 – nullpointer
在你的流程中,你首先嚐試找到更小的元素。首先找到較小的元素還是較大的元素優先? – OnePunchMan
快速排序的變化:一個換號碼後
void swap(int *i, int *j)
{
int t = *i;
*i = *j;
*j = t;
}
void QuickSort(int a[], int lo, int hi) {
int i = lo, j = (lo + hi)/2, k = hi;
int pivot;
if (a[k] < a[i]) // median of 3
swap(a+k, a+i);
if (a[j] < a[i])
swap(a+j, a+i);
if (a[k] < a[j])
swap(a+k, a+j);
pivot = a[j];
showa(lo, hi);
while (i <= k) { // partition
while (a[i] < pivot)
i++;
while (a[k] > pivot)
k--;
if (i <= k) {
swap(a+i, a+k);
i++;
k--;
showa(lo, hi);
}
}
if (lo < k) // recurse
QuickSort(a, lo, k);
if (i < hi)
QuickSort(a, i, hi);
}
輸出,用 '*':
57 70 97 38 63 21 85 68 76 9 81 36 55 79 74 85 16 61 77 49 24
24*70 97 38 63 21 85 68 76 9 57*36 55 79 74 85 16 61 77 49 81*
24 49*97 38 63 21 85 68 76 9 57 36 55 79 74 85 16 61 77 70*81
24 49 16*38 63 21 85 68 76 9 57 36 55 79 74 85 97*61 77 70 81
24 49 16 38 55*21 85 68 76 9 57 36 63*79 74 85 97 61 77 70 81
24 49 16 38 55 21 36*68 76 9 57 85*63 79 74 85 97 61 77 70 81
24 49 16 38 55 21 36 57*76 9 68*85 63 79 74 85 97 61 77 70 81
24 49 16 38 55 21 36 57 9*76*68 85 63 79 74 85 97 61 77 70 81
9*49 16 38 24*21 36 57 55*
9 21*16 38 24 49*36 57 55
9 21 16 24*38*49 36 57 55
9 21 16 24
9 16*21*24
9 16
9 16
21 24
21 24
36*49 38*57 55
36 38*49*57 55
36 38
36 38
49 55*57*
49 55 57
74*68 85 63 79 76*85 97 61 77 70 81
74 68 70*63 79 76 85 97 61 77 85*81
74 68 70 63 61*76 85 97 79*77 85 81
74 68 70 63 61 76 85 97 79 77 85 81
61*68 70 63 74*
61 68 63*70*74
61 63*68*
61 63 68
70 74
70 74
79*97 81*77 85 85*
79 77*81 97*85 85
79 77 81 97 85 85
77*79*
77 79
85*85 97*
85 85 97
85 97
85 97
9 16 21 24 36 38 49 55 57 61 63 68 70 74 76 77 79 81 85 85 97
- 1. 的快速排序
- 2. 的快速排序
- 3. 有人可以解釋這種快速排序方法嗎?
- 4. 快速排序不排序
- 5. 快速模式解釋
- 6. dispatch_after在快速解釋
- 7. 以第一個元素爲快速排序的快速排序
- 8. 需要了解此快速排序
- 9. 快速排序(JAVA)
- 10. perl快速排序
- 11. 瞭解合併排序和快速排序的運行時間
- 12. 對它的排序 - 快速排序
- 13. 快速排序的Python排序麻煩
- 14. 快速排序比慢的std ::排序
- 15. 並行快速排序由單線程快速排序
- 16. LISP中的快速排序
- 17. 快速排序的實施
- 18. DrScheme中的快速排序
- 19. python中的快速排序
- 20. ML中的快速排序
- 21. 快速排序升序
- 22. 快速的問題:這解釋的typedef
- 23. Android服務的快速小解釋?
- 24. 任何人都可以解釋我這個快速排序的例子嗎?
- 25. 快速排序,以結構排序
- 26. 快速排序每次不排序
- 27. 警告而排序與快速排序
- 28. 使用快速排序排序數組
- 29. 快速排序數據表
- 30. Java快速排序錯誤
你跳過7藍色,並停止在7紅色,正確的一個元素比'76'' – BeyelerStudios
分區步驟的目的是確定所有小元素都放在大元素的左側。小/大分類是通過與「數據透視」值比較來決定的。對於算法的進展,必須確保至少有一個小的元素和一個大的元素。 –
@YvesDaoust正如你所提到的那樣,應該有一個小的**和一個大的(需要兩個數字),在上面的情況下流程會是什麼,因爲只剩下一個要比較的元素。 – OnePunchMan