堆排序的实现

  堆排序也是一种重要的排序方式,时间复杂度能达到O(nlogn),是非常优越的排序,下面给出具体代码,原理和思路还是google一下吧,我语言欠缺描述不好,很多大神的博客里都有详细的讲解。

#include<iostream> 
using namespace std; 
void max_heapify(int data[],int i,int heapsize) 
{ 
    int l,r;
	int largest = i; 
    l = 2 * i + 1; 
    r = 2 * i + 2; 
    if(l < heapsize && data[l] > data[i]) 
        largest = l; 
    if(r < heapsize && data[r] > data[largest]) 
        largest = r; 
    if(largest != i) 
    { 
        int tmp = data[largest]; 
        data[largest] = data[i]; 
        data[i] = tmp; 
        max_heapify(data,largest,heapsize); 
    } 
} 
void set_max_heap(int data[],int heapsize) 
{ 
    for(int i = heapsize / 2 - 1;i >= 0;i --) 
        max_heapify(data,i,heapsize); 
} 
void heap_sort(int data[],int heapsize) 
{ 
    set_max_heap(data,heapsize); 
    for(int i = heapsize - 1;i > 0;i --) 
    { 
        int t = data[0]; 
        data[0] = data[i]; 
        data[i] = t; 
        max_heapify(data,0,i); 
    } 
} 
int main() 
{ 
    int data[10] = {3,6,1,9,4,5,2,7,0,8}; 
    heap_sort(data,10); 
    for(int i = 0;i < 10;i ++) 
        cout<<data[i]<<" "; 
    cout<<endl; 
} 

  输出结果:

转载于:https://www.cnblogs.com/coderchuanyu/p/4213971.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值