排序算法之堆排序

来源:互联网 发布:redmine 数据库配置 编辑:程序博客网 时间:2024/05/19 19:15

堆排序的算法如下:

#include <iostream>using namespace std;void AdjustHeap(int a[], int begin, int end, int pos){int lchild = 2 * pos - begin + 1;int rchild = 2 * pos - begin + 2;int TracePos = -1;if(lchild > end)return;if(rchild <= end)a[lchild] > a[rchild]? TracePos = lchild : TracePos = rchild;else if(lchild <= end)TracePos = lchild;if(a[pos] < a[TracePos]) {swap(a[pos], a[TracePos]);AdjustHeap(a, begin, end, TracePos);}}void HeapSort(int a[], int begin, int end){int len = end - begin + 1;for(int i = begin + (len / 2 - 1); i >= begin; --i)AdjustHeap(a, begin, end, i);for(int i = end; i >= begin; --i){AdjustHeap(a, begin, i, begin);swap(a[begin], a[i]);}}int main(){int a[] = {2334, 12112121, 1212, 45, 45, 12, 34343};//int a[] = {};int len = sizeof(a)/sizeof(int);random_shuffle(a, a + len);HeapSort(a, 0, len - 1);for(int i = 0; i < len; ++i)cout<< a[i] << " ";}


0 0
原创粉丝点击