堆排序

来源:互联网 发布:买卖股票的软件 编辑:程序博客网 时间:2024/05/20 18:43

堆排序的过程简洁来说就是,先建堆(我这里写的是最大堆),再依次取出堆头的元素放到堆尾,将堆的元素数减1,每次都重新调整堆。

void insert_heap(int save,int low,int high) //调整堆,由上往下从low到high调整。low当做一个空位。 {int large = low*2+1;  //左子节点 while(large<=high){if(large<high&&a[large]<a[large+1]) //先比较左右子节点,选最大者    large++;if(a[large]<save)  //再与最后的节点比较    break;a[low] = a[large];low = large;large = low*2+1;}a[low] = save;}void heap_build(int *a,int n)  //建堆,从中间开始由下往上建堆 {for(int low=n/2-1;low>=0;low--){int save = a[low];  insert_heap(save,low,n-1); //由low到n-1进行调整 }}void head_sort(int *a,int n)  //堆排序 {heap_build(a,n);for(int last=n-1;last>0;last--){int save = a[last];a[last] = a[0];     //每次都取出头节点insert_heap(save,0,last-1);  //由上往下调整 }}



0 0
原创粉丝点击