堆排序

来源:互联网 发布:sql语句例题 编辑:程序博客网 时间:2024/06/05 09:52
建大堆实现的是从大到小的排序
若要从小到大排序,则建小堆
//******************堆排序***************************

void_AdjustDown(int*a,size_t size,intparent)
{
                intchild =parent* 2 + 1;
                while(child <size)
                {
                                if(child + 1 <size&&a[child] < a[child + 1])
                                {
                                                ++child;
                                }
                                if(a[child]>a[parent])
                                {
                                                swap(a[child],a[parent]);
                                                parent= child;
                                                child =parent* 2 + 1;
                                }
                                else
                                                break;
                }
}

voidHeapSort(int*a,size_tn)
{
                assert(a);
                //建大堆
                for(inti = (n- 2) / 2; i >= 0; --i)
                {
                                _AdjustDown(a,n, i);
                }
                //排序
                intend =n- 1;
                while(end > 0)
                {
                                swap(a[0],a[end]);
                                _AdjustDown(a, end, 0);
                                end--;
                }
}

voidPrint(int*a,size_tsize)
{
                for(inti = 0; i <size; i++)
                {
                                cout <<a[i] <<" ";
                }
                cout << endl;
}

intmain()
{
                inta[] = { 1, 5, 67, 3, 45, 78, 12, 23, 89, 70 };
                intsize =sizeof(a) /sizeof(a[0]);
                HeapSort(a, size);
                Print(a, size);
                return0;
}
0 0