数据结构与算法-学习笔记(11)-堆排序

菜鸟一枚,
刚刚学习数据结构与算法,
为了加深理解,
所以与同学们分享学习过程。

今天学习的是,
堆排序!!!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上代码:

#include <stdio.h>
#include <stdlib.h>

void swap1(int arr[],int i,int j)
{
    int temp;
    temp=arr[i];
    arr[i]=arr[j];
    arr[j]=temp;
}


void heapify(int tree[],int n,int i)   //使其符合parent>c1,c2
{
    int c1 = 2 * i + 1;
    int c2 = 2 * i + 2;
    int max = i;
    if(i >= n)
    {
        return;
    }
    if(c1 < n && tree[c1] > tree[max])
    {
        max = c1;
    }
    if(c2 < n && tree[c2] > tree[max])
    {
        max = c2;
    }
    if(max != i)
    {
        swap1(tree,max,i);
        heapify(tree,n,max);
    }
}


void build_heap(int tree[],int n)   //建堆
{
    int last_node = n - 1;
    int parent = (last_node - 1) / 2;
    int i;
    for(i = parent; i >= 0;i--)
    {
        heapify(tree,n,i);
    }
}

void heap_sort(int tree[],int n)  //堆排序
{

    build_heap(tree,n);
    int i;
    for(i=n-1;i >= 0;i--)
    {
        swap1(tree,i,0);
        heapify(tree,i,0);
    }
}

int main()
{
    int tree[]={2,5,3,1,10,4};
    int n = 6;
    int i;
    heap_sort(tree,n);
    //heapify(tree,n,0); //对这个杂乱数组,变成堆
    for( i = 0;i < n;i++)
    {
        printf("%d ",tree[i]);
    }
    return 0;
}

谢谢同学们的阅读!!!

发布了28 篇原创文章 · 获赞 15 · 访问量 1057

猜你喜欢

转载自blog.csdn.net/qq_43765237/article/details/105543101