[算法]堆排序

来源:互联网 发布:基础编程书 编辑:程序博客网 时间:2024/06/02 19:32
/*Name:堆排序Actor:HTTime:2015年12月23日Error Reporte:1.每次调整的时候,注意size变量! */#include <iostream>#include <stdio.h>#include <conio.h>#include <string.h>#include <vector>#include <algorithm>#define N 200int a[N];int sum = 10;void heapadjust(int adjust,int size)//堆排调整{int largest = adjust;int temp;if (2 * adjust <= size && a[largest] < a[2 * adjust])//左看{largest = 2 * adjust;}if (2 * adjust + 1 <= size && a[largest] < a[2 * adjust + 1])//右看{largest = 2 * adjust + 1;}if (largest != adjust)//调整{temp = a[adjust];a[adjust] = a[largest];a[largest] = temp;if(largest*2 <= size) heapadjust(largest,size);}for(int i=1;i<=size;i++){printf(":%d ",a[i]);}printf("\n");}void heapsort()//堆排序{int i, j;int temp;for (i = sum / 2; i > 0; i--)//从下向上建堆{heapadjust(i,sum);}for(i=1;i<=sum;i++){printf("lll:%d ",a[i]);}printf("\n");for (i = sum; i > 1; i--)//依次放到最后的位置{temp = a[i];a[i] = a[1];a[1] = temp;heapadjust(1,i-1);//调整该点}}int main(){int i,j;for(i=1;i<=sum;i++){scanf("%d",&a[i]);}heapsort();for(i=1;i<=sum;i++){printf("%d ",a[i]);}}

0 0