查詢最小的k個元素

2021-08-31 14:05:33 字數 1314 閱讀 9641

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

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

思路:用乙個k的容器,先放入k個數,然後接下來總是把最大數給踢出去。

用大頂堆,或者紅黑樹,大頂堆,大頂堆在o(1)得到已有的k個數字中的最大值,但需要o(logk)時間完成刪除以及插入操作。紅黑樹通過把結點分為紅、黑兩種顏色並根據一些規則確保樹是平衡的,從而保證在紅黑樹中查詢、刪除和插入操作都只需要o(logk)

public void getmink(int arr,int k)

a[head] = temp;

//列印*********************

for(int i = 0 ; i < length; i++)

printf("/r/n");

//列印*********************列印結束

} // headadjust

void headsort(int *a,int n)

//列印*********************

for(i = 0 ; i < length; i++)

printf("/r/n");

//**********************列印結束

tmp = a[0];

a[0] = a[length-1];

a[length-1] = tmp;

//列印**********************

for(i = 0 ; i < length; i++)

printf("/r/n");

//列印*********************列印結束

for(i = length-1; i>1; --i)

printf("i's value:%d/n",i);

}int main() {

int n ;

int a[1000] ;

printf("input the number you want to sort :");

scanf("%d",&n);

printf("please input the values :");

for(int i=0;iscanf("%d",&a[i]);//輸入時,不能在"%d"內多出任何空格,否則需要多敲乙個字元********************important

printf("/r/n");

headsort(a,n);

for(i=0;iprintf("%d ",a[i]);

printf("/r/n");

return fals

查詢最小的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...