zoukankan      html  css  js  c++  java
  • C语言实现数据结构中的堆创建,堆排序

    #include "stdio.h"
    #include "stdlib.h"
    void swap(int *a,int *b)//交换两个数
    {
    int t;
    t=*a;
    *a=*b;
    *b=t;
    }
    void minheap(int *a,int i)    //小根堆的调整,在i节点向上调整,根据一个所给的数组,对数组进行小根堆的创建
    {
    int temp,j;
    temp=a[i];
    j=(i-1)/2;                         //i节点的父节点
    while(j>=0&&i!=0)
    {
    if(a[j]<temp) break;
    a[i]=a[j];
    i=j;
    j=(i-1)/2;
    }
    a[i]=temp;
    }
    void add(int *a,int key,int n)    //在末尾插入一个节点,然后做出调整
    {
    a[n]=key;
    minheap(a,n);
    }
    void minheapfix(int *a,int i,int n)    //删除节点i后的调整
    {
    int j,temp;
    temp=a[i];
    j=2*i+1;
    while(j<n)
    {
    if(j+1<n&&a[j+1]<a[j])
    j++;
    if(a[j]>temp) break;
    a[i]=a[j];
    i=j;
    j=2*i+1;
    }
    a[i]=temp;
    }
    void deletenumber(int a[],int n)   //删除最后一个节点
    {
    swap(&a[0],&a[n-1]);
    minheapfix(a,0,n-1);
    }
    void sort(int a[],int n)     //对小根堆进行排序,小根堆a[0]为最小值,每次和最后一个节点互换,然后再对堆进行调整,依次类推
    {
    for(int i=n-1;i>=1;i--)
    {
    swap(&a[i],&a[0]);
    minheapfix(a,0,i);
    }
    }
    int main()
    {
    int a[7]={2,3,4,2,5,6,3},i;
    for(i=0;i<7;i++)
    add(a,a[i],i);
    sort(a,7);
    for(i=0;i<7;i++)
    printf("%d ",a[i]);
    return 0;
    }

  • 相关阅读:
    2016 大连网赛
    LightOJ 1012 简单bfs,水
    Pyhton学习——Day30
    Client初见——python
    Server初见——python
    Pyhton学习——Day29
    Pyhton学习——Day28
    Pyhton学习——Day27
    Pyhton学习——Day26
    函数基础作业
  • 原文地址:https://www.cnblogs.com/zhaoheng/p/4338281.html
Copyright © 2011-2022 走看看