mirror of
https://github.com/krahets/hello-algo.git
synced 2025-11-03 13:43:06 +08:00
Translation: Update heap_sort.md (#1631)
* Translation: Update heap_sort.md * Translation: Update heap_sort.md updated per yuelinxin's suggestion.
This commit is contained in:
@ -2,27 +2,27 @@
|
|||||||
|
|
||||||
!!! tip
|
!!! tip
|
||||||
|
|
||||||
Before reading this section, please make sure you have completed the "Heap" chapter.
|
Before reading this section, please ensure you have completed the "Heap" chapter.
|
||||||
|
|
||||||
<u>Heap sort</u> is an efficient sorting algorithm based on the heap data structure. We can implement heap sort using the "heap creation" and "element extraction" operations we have already learned.
|
<u>Heap sort</u> is an efficient sorting algorithm based on the heap data structure. We can implement heap sort using the "heap creation" and "element extraction" operations we have already learned.
|
||||||
|
|
||||||
1. Input the array and establish a min-heap, where the smallest element is at the heap's top.
|
1. Input the array and construct a min-heap, where the smallest element is at the top of the heap.
|
||||||
2. Continuously perform the extraction operation, recording the extracted elements in sequence to obtain a sorted list from smallest to largest.
|
2. Continuously perform the extraction operation, record the extracted elements sequentially to obtain a sorted list from smallest to largest.
|
||||||
|
|
||||||
Although the above method is feasible, it requires an additional array to save the popped elements, which is somewhat space-consuming. In practice, we usually use a more elegant implementation.
|
Although the above method is feasible, it requires an additional array to store the popped elements, which is somewhat space-consuming. In practice, we usually use a more elegant implementation.
|
||||||
|
|
||||||
## Algorithm flow
|
## Algorithm flow
|
||||||
|
|
||||||
Suppose the array length is $n$, the heap sort process is as follows.
|
Suppose the array length is $n$, the heap sort process is as follows.
|
||||||
|
|
||||||
1. Input the array and establish a max-heap. After completion, the largest element is at the heap's top.
|
1. Input the array and establish a max-heap. After this step, the largest element is positioned at the top of the heap.
|
||||||
2. Swap the top element of the heap (the first element) with the heap's bottom element (the last element). After the swap, reduce the heap's length by $1$ and increase the sorted elements count by $1$.
|
2. Swap the top element of the heap (the first element) with the heap's bottom element (the last element). Following this swap, reduce the heap's length by $1$ and increase the sorted elements count by $1$.
|
||||||
3. Starting from the heap top, perform the sift-down operation from top to bottom. After the sift-down, the heap's property is restored.
|
3. Starting from the heap top, perform the sift-down operation from top to bottom. After the sift-down, the heap's property is restored.
|
||||||
4. Repeat steps `2.` and `3.` Loop for $n - 1$ rounds to complete the sorting of the array.
|
4. Repeat steps `2.` and `3.` Loop for $n - 1$ rounds to complete the sorting of the array.
|
||||||
|
|
||||||
!!! tip
|
!!! tip
|
||||||
|
|
||||||
In fact, the element extraction operation also includes steps `2.` and `3.`, with the addition of a popping element step.
|
In fact, the element extraction operation also includes steps `2.` and `3.`, with an additional step to pop (remove) the extracted element from the heap.
|
||||||
|
|
||||||
=== "<1>"
|
=== "<1>"
|
||||||

|

|
||||||
|
|||||||
Reference in New Issue
Block a user