zoukankan      html  css  js  c++  java
  • 最大的k个数问题

    代码来源:

     

    http://blog.csdn.net/v_JULY_v

     

    调整堆为小顶堆的代码片:基本思想就是把孩子节点中大的一个跟父节点交换

    void HeapAdjust(int array[], int i, int Length)
    {
    	int child, temp;
    	for (temp = array[i]; 2*i + 1 <Length; i = child)
    	{
    		 child = 2*i +1;
    		 if (child < Length - 1 && array[child +1] < array[child])
    		 {
     			 child++;
    		 }
    
    		 if (temp > array[child])
    		 {
    			 array[i] = array[child];
    		 }
    		 else
    			 break;
    
    		 array[child] = temp;
    	}
    }

     

     

    一般来说,进行初始化建立堆的时候,需要对数组的一般进行调整,调用代码:

    只需要用一般的数进行调整,就能保证小顶堆的建立。

    for (int i = Length/2 - 1;i >= 0; --i)
    	{//初试建堆,时间复杂度为o(n)
    		HeapAdjust(array,i,Length);
    	}
    


     

    下面是交互两个数的代码片:使用三次异或操作:

    void Swap(int *a, int *b)
    {
    	//异或预算用来交互两个数
    	*a = *a^*b;
    	*b = *a^*b;
    	*a = *a^*b;
    }
    


     

  • 相关阅读:
    hdu 1.2.4
    交换机&&路由器
    AP、AC、无线路由器
    肩胛骨
    无线路由器
    背部肌肉
    胸部肌肉
    redis未授权访问
    进制
    攻防实验
  • 原文地址:https://www.cnblogs.com/wangyaning/p/4236987.html
Copyright © 2011-2022 走看看