查詢最小的k個元素(堆處理和非堆處理)

2021-07-02 23:32:16 字數 1608 閱讀 9518

/*

查詢最小的k個元素

題目:輸入n個整數,輸出其中最小的k個。

例如輸入1,2,3,4,5,6,7和8這8個數字,則最小的4個數字為1,2,3和4。

*//*

《非堆處理》

#include

#include

using namespace std;

int main(void)

}for (int i = 0; i < k; i++)

cout << a[i] << " ";

cout << endl;

return 0;

}*/ 

//《堆處理》 

#include

using namespace std;

typedef struct nodebtnode;

int front, rear;

btnode *buy_node()

/*建立二叉樹

*/btnode * creatbtree(btnode **q, int *a,int n)

root->data = a[0];

root->left = root->right = null;

q[++rear] = root;

t = null;

for (int i = 1; i < n; i++)

p->data = a[i];

p->left = p->right = null;

if (t->left == null) t->left = p;

else  

q[++rear] = p;

}return root;}/*

給二叉樹插入剩下的n-k個值,每次插乙個,然後和最大值交換,並調整

*/btnode * insertvalue(btnode ** q,int value)

p->data = value;

p->left = p->right = null;

if (q[front]->left&&q[front]->right)

else  q[front]->right = p; 

q[++rear] = p;

return q[1];}/*

調整堆*/

void siftheap(btnode ** q)

if (!flag)   tag = 1;}}

}/*對樹排序

*/void sorttree(btnode *q)

rear--;}}

/*對新插的資料進行處理————與最大值交換,並調整

*/void fun(btnode **q)

rear--;

siftheap(q);}/*

輸出二叉樹

*/void print(btnode *root)

}int main(void)

for (int i = 1; i <= k; i++)

cout << q[i]->data << " ";

cout << endl;

}root = q[1];

print(root);

return 0;

}

查詢最小的k個元素

題目 輸入n個整數,輸出其中最小的k個。演算法思想,要是將n個數排序然後輸出前k個,方法很簡單,但計算量比較大,為o nlogn 要是新建乙個有k個元素陣列,在陣列不滿時,將每乙個輸入的資料存入陣列。若陣列滿了,則比較輸入的資料與陣列中最大元素的大小,來決定接下來幹什麼,接下來幹什麼,我語言表達能力...

查詢最小的k個元素

查詢最小的k個元素 題目 輸入n個整數,輸出其中最小的k個。例如輸入1,2,3,4,5,6,7和8這8個數字,則最小的4個數字為1,2,3和4。1 輸入元素,並排序 2 輸出前k個元素 排序 採用高效的排序方法,如 快速排序,歸併排序等 方法一 採用最簡單的方法 include include in...

查詢最小的k個元素

題目 輸入n個整數,輸出其中最小的k個數 例如 1 2 3 4 5 6 7 8 這8個數字,則最小的4個數字為1,2,3,4,第一種 直接對其先排序,再取頭幾個數 這樣最快是nlogn 快排或者堆排 include using namespace std void partsort int a,in...