堆排序的C++代码实现

来源:互联网 发布:国考一次上岸知乎 编辑:程序博客网 时间:2024/06/05 16:42
//交换位于i和j处的值void exchange(int *a,int i,int j){    int temp = a[i];    a[i] = a[j];    a[j] = temp;}//保持最大堆的特性void max_heapify(int *a,int i,int length){    int l = i*2+1;//求左孩子结点,由于数据是从0开始计数,故需要乘以2加1    int r = (i+1)*2;//求右孩子结点    int largest = i;    if (l<=length&&a[l]>a[i])    {        largest = l;    }    if (r<=length&&a[r]>a[largest])    {        largest = r;    }    if (largest != i)    {        exchange(a,i,largest);        max_heapify(a,largest,length);//递归使子结点满足最大堆的特性    }}void heap_sort(int *a,int len){    int length = len-1; //由于C++的下标是从0开始,故长度在原有的长度上-1    int i;    for (i = length/2;i>=0;i--) //从叶结点开始,创建最大堆    {        max_heapify(a,i,length);    }    for (i = length;i>0;i--) //根据最大堆进行排序    {        exchange(a,0,i);        max_heapify(a,0,i-1);    }}


 

0 0