利用堆排序查找数组中第K小的元素方法
生活随笔
收集整理的這篇文章主要介紹了
利用堆排序查找数组中第K小的元素方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先從數組A[ ]中取前k個元素建立大根堆,然后再遍歷剩下的n-k個元素,
如果大于或者等于堆頂,則舍棄;
如果小于堆頂,則將其與堆頂替換,并將換下來的堆頂舍棄,然后重新向下調整為大根堆,最后堆頂即為所求。
時間復雜度為O(nlogk)
/*給定數組A[n],設計最優算法查找第k小元素,最優算法是堆排序,時間復雜度O(nlogk)*/ void Adjust(A[],k,len){int i;A[0]=A[k];for(i=k*2;i<len;i*=2){if(A[i]<A[i+1]){i++;}if(A[0]<A[i]){A[k]=A[i];k=i;}else break;}A[k]=A[0]; }void HeapSort(int A[]){int n=A[].length;for(i=k/2;i>=1;i--) //取前k個元素建立大根堆 Adjust[A,i,k];for(i=k+1;i<=n;i++){if(A[i]<A[1]){ //A[1]位堆頂 A[1]=A[i];Adjust[A,1,k]; }}return A[1]; //堆頂即為所求 }?
總結
以上是生活随笔為你收集整理的利用堆排序查找数组中第K小的元素方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微程序控制器原理(增量方式和断定方式结合
- 下一篇: 计算机考研计组简答题复习-本篇长期更新