数据结构:堆排序 C++

#include<iostream>
#include<fstream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
//#include <array>
#include <sstream>
using namespace std;


//堆排序
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------*/
int heapSize = 0;
int Left(int index){ return((index << 1) + 1); }
int Right(int index){ return((index<< 1) + 2); }


void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}


void maxHeapify(int array[], int index)
{
int largest = 0;
int left = Left(index);
int right = Right(index);


//把largest取为堆顶与其左子节点的较大者
if ((left <= heapSize) && (array[left] > array[index]))
largest = left;
else
largest = index;


//把largest与堆顶的右子节点比较,取较大者
if ((right <= heapSize) && (array[right] > array[largest]))
largest = right;


if (largest != index)
{
//如果堆顶不是最大者,则交换并递归调整
swap(&array[index], &array[largest]);
maxHeapify(array, largest);
}
}


//初始化堆,将数组每一个元素放到适当位置
//完成之后,堆顶元素为最大
void buildMaxheap(int array[], int length)
{
int i;
heapSize = length;
for (i = (length >> 1); i >= 0; i--)
maxHeapify(array, i);
}


void heap_sort(int array[], int length)
{
int i;


//初始化堆
buildMaxheap(array, (length - 1));


for (i = (length - 1); i >= 1; i--)
{
swap(&array[0], &array[i]);
//交换出堆顶元素和尾元素,并取出堆顶元素
heapSize--;//移除堆尾元素
maxHeapify(array, 0);
}
}




void print_arrary(int a[], int len)
{
int i;
for (i = 0; i < len; i++)
{
cout << a[i] << "";
}
cout << endl;
}


int main(int argc, int *argv[])
{
//int a[] = { 7, 3, 5, 8, 9, 1, 2, 4};
int a[] = { 45, 68, 20, 39, 88, 97, 46, 59 };
print_arrary(a, 8);
//insert_sort(a, 8);
/*shell_sort(a, 8);*/
/*bubble(a, 8);*/
//quick_sort(a,0, 7);
//select(a, 8);
heap_sort(a, 8);
print_arrary(a, 8);
getchar();
return 0;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值