怎样使用c++语言实现简单的堆排序

 时间:2026-02-13 03:13:37

1、堆结构

堆这种数据结构首先是一种特殊的完全二叉树,且满足子节点值大于父节点点值的大或小。

怎样使用c++语言实现简单的堆排序

2、首先取未排序数组4,3,7,1,8,5。下面我们演示一下该算法的实现步骤。

怎样使用c++语言实现简单的堆排序

3、根据数组元素的位置,首先构建一个完全二叉树,填满一层之后再填满下一层。

怎样使用c++语言实现简单的堆排序

4、调整完全二叉树中元素的次序,保证每一个节点元素要比他的子节点元素要大,构成一个大顶堆。

怎样使用c++语言实现简单的堆排序

5、这个时候该纾解点的根节点元素是所有元素中最大的元素。只要按照把根节点一次提取出来即可。

怎样使用c++语言实现简单的堆排序

怎样使用c++语言实现简单的堆排序

怎样使用c++语言实现简单的堆排序

怎样使用c++语言实现简单的堆排序

怎样使用c++语言实现简单的堆排序

6、提供代码:

#include <iostream>

using namespace std;

void heapify(int arr[],int n,int i)

{

      int smallest=i;

      int l=2*i+1;

      int r=2*i+2;

      if (l<n&&arr[l]<arr[smallest])

            smallest=l;

      if (r<n&&arr[r]<arr[smallest])

            smallest=r;

      if (smallest!=i)

      {

            swap(arr[smallest],arr[i]);

            i=smallest;

            heapify(arr,n,i);

      }

}

void heapsort(int arr[],int n)

{

      for (int i=n/2-1;i>=0;i--)

            heapify(arr,n,i);

      for (int i=n-1;i>=0;i--)

      {

            swap(arr[0],arr[i]);

            heapify(arr,i,0);

      }

}

void printarray(int arr[],int n)

{

      for(int i=n-1;i>=0;i--)

            cout<<arr[i]<<" ";

      cout<<endl;

}

int main()

{

    int arr[]={3,8,2,9,12,5};

    int n=sizeof(arr)/sizeof(int);

    cout<<"origin array:";

    printarray(arr,n);

    heapsort(arr,n);

    cout <<"sorted array:";

    printarray(arr,n);

    return 0;

}

怎样使用c++语言实现简单的堆排序

  • 使用exe4j打包Java程序
  • VS怎么开启应用自定义窗口布局前进行确认
  • 上传文件框怎么美化
  • VS扩展如何添加我的库#校园分享#
  • 武汉地铁2号线直达的大学
  • 热门搜索
    固原旅游 渭南旅游 义乌旅游 济南旅游景点大全 北京旅游景点地图 潍坊旅游景点 云南旅游攻略自由行 平谷旅游 英国旅游攻略 北京旅游网