堆排序的实现

  堆排序也是一种重要的排序方式,时间复杂度能达到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; 

} 

  输出结果:

你可能感兴趣的:(堆排序)