堆排序中 10,11行的意义
[cpp] view plain copy print?1. // 从i节点开始调整,n为节点总数 从0开始计算 i节点的子节点为 2*i+1, 2*i+2
2. void MinHeapFixdown(int a[], int i, int n)
3. {
4. int j, temp;
5.
6. temp = a[i]; //拿出i节点
7. j = 2 * i + 1; //i节点的左节点
8. while (j < n)
9. {
10. if (j + 1 < n && a[j + 1] < a[j]) //在左右孩子中找最小的
11. j++;
12.
13. if (a[j] >= temp)
14. break; //如最小的子节点大于等于父节点跳出
15.
16. a[i] = a[j]; //把较小的子结点往上移动,替换它的父结点
17. i = j;
18. j = 2 * i + 1;
19. }
20. a[i] = temp;
21. }