面试题:堆排序

来源:互联网 发布:c语言非递归遍历算法 编辑:程序博客网 时间:2024/05/18 00:01
#include <iostream>using namespace std;void heapAdjust(int* a,int i,int size){    int leftChild = i*2;    int rightChild = i*2+1;    if(i>=size/2){        return;    }    int max = i;    if(leftChild<size && a[leftChild] > a[max]){        max = leftChild;    }    if(rightChild<size && a[rightChild] > a[max]){        max = rightChild;    }    if(max!=i){        swap(a[i],a[max]);        heapAdjust(a,max,size);    }}void heapSort(int* a,int size){    for(int i=size/2-1;i>=0;i--){        heapAdjust(a,i,size);    }    for(int i=size-1;i>=0;i--){        swap(a[0],a[i]);        heapAdjust(a,0,i-1);    }}int main(){    int a[] = {100,3,50,8,10,2323,23,9,44,55,66,22,43,12};    int size = sizeof(a)/sizeof(int);    for(int i=0;i<size;i++){        cout<<a[i]<<" ";    }    cout<<endl;    heapSort(a,size);    for(int i=0;i<size;i++){        cout<<a[i]<<" ";    }    cout<<endl;}

0 0
原创粉丝点击