91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

小代碼 尋找K個最大的數

發布時間:2020-05-28 14:10:50 來源:網絡 閱讀:219 作者:wzdouban 欄目:編程語言
 /*****************************
 復雜度:
 
 ***************************/
 
#include<iostream>
#include<assert.h>
#include<vector>  
#include<stdlib.h> 
#include<time.h>
using namespace std;
 
#define N 1000 
#define K 100
void AdjustDown(int *a, size_t root, size_t size) 
{ //向下調整小堆
    size_t parent = root;
    size_t child = parent * 2 + 1;
    while (child < size)
    {
        if (child + 1 < size && a[child] > a[child + 1])
        {
            ++child;
        }
        if (a[parent] > a[child])
        {
            swap(a[parent], a[child]);
            parent = child;
            child = parent * 2 + 1;
        }
        else//注意不滿足交換條件時跳出本次循環
        {
            break;
        }
    }
}
void GetTopk(const vector<int>& Vnumber, int n, int k)//N個數中找最大的前k個數--小堆實現
{
    assert(n>k);
    int *TopkArray = new int[k];//通過前k個元素建立含有k個元素的堆
    for (size_t i = 0; i < k; i++)
    {
        TopkArray[i] = Vnumber[i];
    }
    for (int i = (k - 2) / 2; i >= 0; --i)//建小堆
    {
        AdjustDown(TopkArray, i, k);
    }
    //從第k個元素開始到第n個元素分別與堆頂元素進行比較,較大數據入堆頂,再對整個堆進行下調,使堆頂存放最小元素(小堆)
    for (size_t i = k; i < n; ++i)
    {
        if (Vnumber[i]  > TopkArray[0])
        {
            TopkArray[0] = Vnumber[i];
            AdjustDown(TopkArray, 0, k);
        }
    }
    size_t count = 0;
    for (size_t i = 0; i < k; ++i)//打印k個最大數據,即堆中所有元素
    {
        cout << TopkArray[i] << " ";
        ++count;
        if (count % 10 == 0)
        {
            cout << endl;
        }
    }
    cout << endl;
    delete[] TopkArray;//注意釋放TopkArray所占的內存
    TopkArray = NULL;
}

void CreateVnumber(vector<int>& Vnumber)//創建N個數
{
    srand((unsigned int)time(NULL));
    //srand(time(0));
    Vnumber.reserve(N);
    for (size_t i = 0; i<N; i++)
    {
        Vnumber.push_back(rand() % 1000);//產生N個隨機值
    }
    for (size_t i = K; i < N; ++i)
    {
        Vnumber[i] *= 100;
    }
}
int main()
{
    vector<int> Vnumber;
    CreateVnumber(Vnumber);
    GetTopk(Vnumber, N, K);
    //int length = Vnumber.size();
    //for(int i=0;i<length;i++)
    //{
    //   cout<<Vnumber[i]<<" ";
   // }
 	return 0;
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辽宁省| 安阳市| 新丰县| 全椒县| 屏东县| 望都县| 鄂伦春自治旗| 利津县| 曲阜市| 饶平县| 务川| 泰兴市| 晋城| 张家界市| 临江市| 布尔津县| 万盛区| 高安市| 三江| 台前县| 鹤山市| 镇安县| 阿巴嘎旗| 福清市| 东莞市| 保山市| 申扎县| 乌鲁木齐县| 张家港市| 夏邑县| 兴化市| 德兴市| 晋城| 宽城| 巫山县| 揭西县| 成安县| 德钦县| 乐陵市| 凤城市| 绵竹市|