找出N个浮点数中最大的k个不同的浮点数

来源:互联网 发布:淘宝如何设置选项卡 编辑:程序博客网 时间:2024/06/01 07:36


  N个浮点数中,有相同的浮点数,找出其中最大的k个不同的浮点数;

  用容量为k的最小堆存储最大的k个不同的浮点数,堆顶就是k个中最小的浮点数,遍历N个数,与堆顶元素比较大小,若比堆顶元素大,则与之交换,调整最小堆。


void Heap(float heap[],int i,int size)  {      int l,r,mix;  float temp;       l = 2*i;      r = 2*i+1;         if(l<size&&heap[l-1]<heap[i-1])          mix = l;      else          mix = i;          if(r<size&&heap[r-1]<heap[mix-1])          mix = r;       if(mix != i)       {           temp = heap[mix-1];           heap[mix-1] = heap[i-1];           heap[i-1] = temp;           Heap(heap,mix,size);       }        }     void createHeap_And_Sort(float heap[],int n)  {      int m = n/2,size = n;      for(int j = m;j>0;j--)          Heap(heap,j,size);  }  int main(void){int k = 3,num=0,flag=0,i,j;float data[10] = {1.5,1.5,2.5,2.5,3.5,3.5,5,0,-1.5,3.5};float heap[3];heap[0] = data[0];num++;for(i = 1;i<10;i++){for(j=0;j<num;j++)if(data[i]==heap[j]){flag = 1;break;}if(flag == 0){heap[num] = data[i];num++;}if(num==k)break;flag = 0;}    createHeap_And_Sort(heap,k);for(i = k;i<10;i++){if(data[i]>heap[0]){heap[0] = data[i];Heap(heap,0,k);}}for(i = 0;i<k;i++)cout<<heap[i]<<endl;return 0;}


原创粉丝点击