堆排序(Julia实现)

function downAdjust(array, parentIndex, length)

    # 记录父节点

    temp = array[parentIndex]

    # 定位左孩子

    childIndex = 2 * parentIndex

    while childIndex <= length

        # 如果右孩子大于左孩子,则定位到右孩子

        if childIndex + 1 < length && array[childIndex + 1] > array[childIndex]

            childIndex += 1

        end

        # 父节点大于最大子节点时,退出下沉操作

        if temp >= array[childIndex] break end

        # 用最大子节点的值覆盖父节点

        array[parentIndex] = array[childIndex]

        parentIndex = childIndex

        childIndex = 2 * childIndex

    end

    # 父节点赋值

    array[parentIndex] = temp

end

function heapSort(array)

    i::Int64 = length(array) / 2

    # 将数组构建为二叉堆

    while i >= 1

        downAdjust(array, i, length(array))

        i -= 1

    end

    print("$array==排序结果==>")

    j = length(array)

    while j > 1

        # 第一个元素和最后一个元素交换

        temp = array[j]

        array[j] = array[1]

        array[1] = temp

        # 下沉调整最大堆

        downAdjust(array, 1, j)

        j -= 1

    end

    print(arr)

end

#——————————————————————————

arr = [1 3 2 6 5 7 8 9 10 0]

println("开始堆排序")

print("$arr==二叉堆==>")

heapSort(arr)

你可能感兴趣的:(堆排序(Julia实现))