- /* coded by zzy 2012/03/19 */
- #include <iostream>
- using namespace::std;
- void AdjustDown(int* a,int k,int len)
- {
- a[0] = a[k];
- for(int i = 2 * k; i <= len; i *= 2)
- {
- if(i < len && a[i] < a[i+1])
- i++;
- if(a[0] > a[i])
- break;
- else
- {
- a[k] = a[i];
- k = i;
- }
- }
- a[k] = a[0];
- }
- void BulidMaxHeap(int* a,int len)
- {
- for(int i = len/2; i > 0; i--)//从n/2反复调整堆
- {
- AdjustDown(a,i,len);
- }
- }
-
- int _tmain(int argc, _TCHAR* argv[])
- {
- int a[8] = {0,2,4,6,7,8,9,4};
- int len = 7;
- int temp = 0;
- BulidMaxHeap(a,7);
- for(int i = 0;i < 8;i++)
- {
- cout << a[i];
- }
- cout << endl;
- for(int i = 1; i <= len; i++)
- {
- cout << a[1];
- a[1] = a[len-i+1];
- AdjustDown(a,1,len-i);
-
- }
- //getchar();
- return 0;
- }
京东补录的时候用的笔试题还是去年的。最后一道选出K个最大值。
我的想法是维护一个大顶堆来进行操作,结构忘记了AdjustDown的编写方法,随手写了两句话,结构拿冒泡实现的同学得到了面试的机会。补一下功课。
阅读(923) | 评论(0) | 转发(1) |