不理解t在哪里,玄关
查看原帖
不理解t在哪里,玄关
1132339
SIRIUS0105楼主2024/3/5 17:38

发疯搞了一个桶排

然后光荣地T了

#include <iostream> 
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <fstream>
#include <vector>

using namespace std;
const int N = 5000001;

int data[N], num, idx; 

//桶排序 
void BucketSort(int a[], int n)
{
    int minval = a[0], maxval = a[0];
    for(int i = 0; i < n; i ++)
	{//寻找原序列数组元素的最大值和最小值 
        minval = min(minval, a[i]);
        maxval = max(maxval, a[i]);
    }

    int bnum = 100;//桶中元素个数 
    int m = (maxval - minval) / bnum + 1;//桶的个数 
    vector< vector<int> > bucket(m);

    //收集,将元素入相应的桶中. 减偏移量是为了将元素映射到更小的区间内,省内存 
    for(int i = 0; i < n; i ++) 
    {
    	bucket[(a[i] - minval) / bnum].push_back(a[i]);
    }

    //将桶内元素排序 
    for(int i = 0; i < m; i ++) 
    {
    	sort(bucket[i].begin(), bucket[i].end());
    }

    //收集, 将各个桶中的元素收集到一起 
    for(int i = 0, k = 0; i < m; i ++)
	{
        for(int j = 0; j < bucket[i].size(); j ++)
		{
            data[k++] = bucket[i][j];
        }
    }
}
int main() 
{
	int n, k;
	cin >> n >> k;
	
	//int a[100001], temp;
	for(int i=0; i<n; i++)
	{
		cin >> data[i];
	}

    BucketSort(data, n);

    cout << data[k];

    return 0;
}

。。。。。

求解

2024/3/5 17:38
加载中...