堆排序--还有递归法没有写

#include <iostream>
using namespace std;
void HeapAdjust(int arr[],int s,int m)//大顶堆,m表示最后一个数字位置,s表示第一个位置,都是下标
{
    int cur=s;
    int index;
    int tmp=arr[cur];
    while(cur*2+1<=m)
    {
        index=cur*2+1;//left child
        if(index<m&&arr[index]<arr[index+1])
        {
            index++;//right child
        }
        if(arr[cur]<arr[index])
        {
            arr[cur]=arr[index];
            arr[index]=tmp;
            cur=index;
        }
        else
        {
            break;
        }
    }
}
void HeapSort(int arr[],int size)//表示数组中元素的个数
{
    int arrSize=size;//(arrSize-1-1)/2表示最后一个父节点
    for(int i=(arrSize-1-1)/2;i>=0;i--)
    {
        HeapAdjust(arr,i,arrSize-1);
    }
    swap(arr[0],arr[size-1]);
    for(int i=arrSize-1-1;i>0;i--)
    {
        HeapAdjust(arr,0,i);
        swap(arr[0],arr[i]);
    }
}
int main()
{
    int arr[]={3,6,4,8,1,4,3,5,23,4324,5435,6546,76573,453,546,765,8768,987,654};
    HeapSort(arr,19);
    for(int i=0;i<19;i++)
        cout<<arr[i]<<" ";
    getchar();
    return 0;
}

 

posted on 2016-07-29 19:57  达达123567  阅读(222)  评论(0编辑  收藏  举报

导航