c++实现堆排序--从俺的java版本翻译过来

来源:互联网 发布:淘宝怎么买115会员2017 编辑:程序博客网 时间:2024/06/03 21:20

调整堆:

void AdjustHeap(int a[],int i,int size){int leftChild = 2 * i;int rightChild = 2 * i +1;int adjustIndex = i;//记录调整的位置if(i < size/2){if(leftChild < size && a[leftChild] >= a[adjustIndex]){adjustIndex = leftChild;}if(leftChild < size && a[rightChild] >= a[adjustIndex]){adjustIndex = rightChild;}if(adjustIndex != i){int temp = a[adjustIndex];a[adjustIndex] = a[i];a[i] = temp;AdjustHeap(a,adjustIndex,size);}}}

建立堆:

void BuildHeap(int a[],int size){for(int i= size / 2;i>=0;i--){AdjustHeap(a,i,size);}}


实现排序:

int *Sorted(int a[],int size){BuildHeap(a,size);for(int i = size - 1; i>0 ;i--){int tmp = a[0];a[0] = a[i];a[i] = tmp;AdjustHeap(a,0,i);}return a;}


测试:
int _tmain(int argc, _TCHAR* argv[]){int a[] ={0,11,12,3,4};//int* p = a;//cout<<*(p+2)<<endl;//*(p + 2) p指向的地址的基础上加2再取值  结果为:12//cout<<*p+2<<endl;      //*p+2   p指向地址的值再加上2  结果为:2int k[10] ={-9,8,1,2,5,4,7,6,3,9};int *p = Sorted(k,10);for(int i=0;i<10;i++){cout<<" "<<*(p + i);}return 0;}


结果:



0 0
原创粉丝点击