您的位置:首页 > 其它

堆与堆排序

2015-09-20 20:12 183 查看
原文链接:/article/1389267.html

void MinHeapFixup1(int *a,int i){
int j;
int temp;

j = (i - 1) / 2;
temp = a[i];

while(j >= 0 && i != 0){
if(a[j] < a[i])
break;

a[i] = a[j];
i = j;
j = (i - 1) / 2;
}
a[i] = a[j];
}


void MinHeapFixup(int *a,int i){
for(int j = (i - 1) / 2; j >= 0 && i != 0 && a[j] > a[i];i = j,j = (i - 1) / 2)
swap(a[i],a[j]);
}


void MinHeapAddNum(int *a,int n,int num){
a
= num;
MinHeapFixup(a,n);
}


void MinHeapFixdown(int *a,int i,int n){
int j = 2 * i + 1;
int temp = a[i];

while(j < n){
if(j + 1 < n && a[j + 1] < a[j])
j++;
if(a[j] > temp)
break;

a[j] = temp;
i = j;
j = 2 * i + 1;
}
a[i] = temp;
}


void MinHeapFixdown2(int *a,int i,int n){
for(int j = 2 * i + 1; j < n && i < n;i = j,j = 2 * i + 1){
if(j + 1 < n && a[j + 1] < a[j])
j++;

if(a[j] > a[i])
break;
swap(a[j],a[i]);
}
}


void MinHeapDelNum(int *a,int n){
swap(a[0],a[n - 1]);
MinHeapFixdown(a,0,n - 1);
}


void MakeMinHeap(int *a,int n){
for(int i = n / 2 - 1;i >= 0;i--)
MinHeapFixdown(a,i,n);
}


void MinHeapSortToDes(int *a,int n){
MakeMinHeap(a,n);

for(i = n - 1;i >= 0;i--){
swap(a[0],a[i]);
MinHeapFixdown(a,0,i);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: