堆排序代码,比较喜欢简洁的代码,发现网上找到的堆排序代码太冗长了,现在整理一下,适合IT公司笔试面试用。
<pre name="code" class="cpp">void swap(int& a, int& b){
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
void HeapAdjust(int arr[],int root, int size){
while(2 * root + 1 < size){
int lchild = 2 * root + 1;
if( lchild + 1 < size )
lchild = arr[ lchild ] > arr[ lchild + 1 ] ? lchild : lchild + 1;
if( arr[root] < arr[lchild]){
swap( arr[root], arr[lchild]);
root = lchild;
}else
break;
}
}
void HeapSortData(int arr[], int size){
//将Hr[0,Lenght-1]建成大根堆
for (int i = size / 2 - 1; i>=0; i--){
HeapAdjust(arr, i, size);
}
for (int i = size - 1; i>0; i--){
swap( arr[0], arr[i]);
//将H.r[0..i]重新调整为大根堆
HeapAdjust(arr, 0, i);
}
}