首页 > 代码库 > 堆排序

堆排序

 1 #include<iostream> 2 using namespace std; 3 int heap[101]; 4 int heap_size; 5 void put(int d)                 //heap[1]为堆顶   插入  6 { 7     int now, next; 8     heap[++heap_size] = d; 9     now = heap_size;10     while(now > 1)11     {12         next = now/2;// 父节点 13         if(heap[now] >= heap[next]) 14         break;15         swap(heap[now], heap[next]);16         now = next;17     }18 }19 int get()                //heap[1]为堆顶  获取 20 {21     int now=1, next, res= heap[1];22     heap[1] = heap[heap_size--];//取出末尾元素 23     while(now * 2 <= heap_size)24     {25         next = now * 2;// next 左孩子 26         if (next < heap_size && heap[next + 1] < heap[next])27         next++;28         if (heap[now] <= heap[next]) 29         break;30         swap(heap[now], heap[next]);31         now = next;32     }33     return res;34 }35 36 int main()37 {38     int n;39     cin>>n;40     for(int i=1;i<=n;i++)41     {42         int dr;43         cin>>dr;44         put(dr);45     }46     for(int i=1;i<=n;i++)47     {48         cout<<get()<<endl;49     }50     return 0;51 }

 

堆排序