堆排序(最小堆)

#include<iostream>
#define SIZE 123456
#define K 100
using namespace std;
void swap(int *a,int *b){
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}
void HeapAdjust(int array[],int i,int length)
{
    int left    = i*2;
    int right   = i*2+1;
    int largest = i;
    if (left<=length && array[left] < array[largest]) {
        largest     = left;
    }
    if (right<=length && array[right] < array[largest]) {
        largest     = right;
    }
    if (largest!=i) {
        swap(&array[largest], &array[i]);
        HeapAdjust(array, largest, length);
    }
}

void BuildHeap(int array[],int length)
{
    for (int i=length/2; i>=1; i--) {
        HeapAdjust(array, i, length);
    }
}

void HeapSort(int array[],int length)
{
    BuildHeap(array, length);
    for (int i=length; i>=2; i--) {
        swap(&array[i], &array[1]);
        HeapAdjust(array, 1, i-1);
    }
}
int main(){
    int test[] = {0,4,1,3,2,16,9,10,14,8,7};
    for(int i = 1; i <= 10; i++)
        cout<<test[i]<<"  ";
    cout<<endl;
    HeapSort(test,10);
    for(int i = 1; i <=10; i++)
        cout<<test[i]<<"  ";
    cout<<endl;
    return 0;
}

4 1 3 2 16 9 10 14 8 7
16 14 10 9 8 7 4 3 2 1
Program ended with exit code: 0

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 曾经有一份美好的爱情放在我的面前我没有珍惜。等到失去后才后悔莫及。如果可以再对小李说。毛欣想说。这辈子无缘再牵手。...
    毛欣与小李阅读 2,726评论 0 13
  • 【1】7,9,-1,5,( ) A、4;B、2;C、-1;D、-3 分析:选D,7+9=16;9+(-1)=8;(...
    Alex_bingo阅读 19,288评论 1 19
  • Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当...
    loser_loding阅读 381评论 0 0
  • 每日一搬 原作地址 1988对我来说不是一个爱情剧,它理所当然的应该是一个怀旧青春剧。 在青春中,爱情只是其中的一...
    文千会阅读 534评论 0 0
  • 卧室门响了,他光着身子站在那儿,用手揉着惺忪的眼睛,朝她撒娇似的笑着。正坐在镜子前梳头的她扭头看到他这个样子,忽然...
    奴十婆阅读 141评论 0 1