堆排序

作者: 曾柏超 | 来源:发表于2018-03-20 11:51 被阅读0次

https://www.jianshu.com/p/938789fde325



//
//  main.c
//
//  Created by 柏超曾 on 3/20/18.
//  Copyright © 2018 柏超曾. All rights reserved.
//

#include <stdio.h>

//给定父节点的索引,得到左子节点的索引
#define LeftChild(i) (2*(i)+1)
//元素下沉方法
void PercDown(int A[], int i, int N)
{
    //子节点的索引号
    int child;
    //存储当前父节点元素的临时变量
    //(注:每一个节点都可以看作是其子树的根节点)
    int tmp;
    
    for (tmp = A[i]; LeftChild(i)<N; i = child)
    {
        child = LeftChild(i);
        //挑选出左、右子节点中较大者
        if (child != N-1 && A[child+1]>A[child])
        {
            child++;
        }
        //比较当前父节点与较大子节点
        if (A[i]<A[child])
        {
            //交换当前父节点处的元素值与较大子节点的元素值
            tmp= A[i];
            A[i] = A[child];
            A[child] = tmp;
        }
        else
        {
            break;
        }
        
    }
}


//交换两个元素的位置
void Swap(int *num1, int * num2)
{
    int tmp = *num1;
    *num1 = *num2;
    *num2 = tmp;
}
//堆排序
void HeapSort(int A[], int N)
{
    int i;
    //步骤一:创建大根堆
    for (i  = N/2;  i>=0; i--)
    {
        PercDown(A, i, N);
        
    }
    //步骤二:调整大根堆
    for ( i = N-1; i > 0; i--)
    {
        //首尾交换
        Swap(&A[0], &A[i]);
        //元素下沉
        PercDown(A, 0, i);
    }
}



//主函数
int main(int argc, const char * argv[])

{
    int A[6] = {4,5,3,2,6,1};
    HeapSort(A, 6);
    
    
    for(int i = 0; i < 6;i ++)
    {
        printf("%d ", A[i]);
    }

    
    return 0;
}




相关文章

  • 堆排序

    目录 1.堆排序介绍 2.堆排序图文说明 3.堆排序的时间复杂度和稳定性 4.堆排序实现 堆排序介绍 堆排序(He...

  • 堆排序---基础篇

    本文主要介绍堆排序的一些基本过程和分析。 大纲 堆排序简介 堆排序代码实现 1. 堆排序简介 1.1 堆排序的存储...

  • 堆和堆排序

    最小K个数 堆排序 堆排序

  • JS实现堆排序

    原理 堆排序原理 实现 说明 堆排序对大文件很有效 堆排序是不稳定排序

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • 堆排序

    转载:图解排序算法(三)之堆排序 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选...

  • 排序

    原创 堆排序: 使用visit数组从本质出发获取大顶堆排序。

  • 堆排序

    堆排序

  • C++基础入门之模板堆排序(上):模板上的list的创造与操作

    整段源码链接C++的模板元堆排序 要点 组建数据结构list 组建对list的各种基本操作 堆排序中组建堆排序个个...

  • 3.2-选择排序-堆排序

    参考链接 选择排序:堆排序(Heap Sort) 白话经典算法系列之七 堆与堆排序 堆排序与快速排序,归并排序一样...

网友评论

      本文标题:堆排序

      本文链接:https://www.haomeiwen.com/subject/qfwvqftx.html