題目:輸入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...