gpt4 book ai didi

c++ - 使用 "Sort K number of elements based array"算法的数组中的第 K 个最大数

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:12:23 25 4
gpt4 key购买 nike

我正在尝试实现以下算法来查找文本文件中给定的第 k 个最大输入数。第一个数字确定 k 个变量,下一个数字确定元素总数(N),其余为数字列表。算法描述为:

  • 只存储数组的前k个数
  • 按降序对数组进行排序,例如使用插入排序
  • 一一读出剩下的数字:
  • 如果小于数组中第k个位置的数则忽略
  • 否则;将其插入数组中的正确位置并移动剩余数字(第k个位置的数字将被抛出出数组)
  • 返回数组中索引 k-1 处的数字。

AlgorithmSortK::AlgorithmSortK(int k) : SelectionAlgorithm(k)
{
this->k = k;

}



int AlgorithmSortK::select()
{

int N = 0;
int x=0;
int *pNums = 0;
cin>>N;
cout<<"N:"<<N<<endl;
pNums = new int[N];
int key, j;
for (int i=0; i<k; i++)
{
cin>>x;
pNums[i] = x;
cout<<pNums[i]<<endl;



for (i = 1; i <k; i++)
{
key = pNums[i];
j = i - 1;
while (j >= 0 && pNums[j] <key)
{
pNums[j + 1] = pNums[j];
j = j - 1;
}
pNums[j + 1] = key;
}

for ( i=k; i<N; i++)
{
cin>>x;

if(x>pNums[k-1])
{

for (int shifter=0; shifter<k; shifter++)
{
pNums[shifter]=x;

pNums[shifter] = pNums[shifter+1];

}
for (int r = 1; r <k; r++)
{

key = pNums[r];
j = r - 1;
while (j >= 0 && pNums[j] <key)
{
pNums[j + 1] = pNums[j];
j = j - 1;
}
pNums[j + 1] = key;

}
}
}
cout<<"pNums[k-1]:"<<pNums[k-1]<<endl;
}

这是我的代码,它编译正确,但我得到了 pNums[k-1] 的不同且不正确的结果。我想我在 k-1 索引操作中错误地进行了移动和删除元素。 N 是元素的总数,我对 k-limited 数组使用插入排序。

最佳答案

这应该有帮助:

int AlgorithmSortK::select()
{
int N, x;

cin >> N; // number of the input elements
cout << "N:" << N << endl;

std::vector<int> nums;
nums.resize( k, std::numeric_limits<int>::min() ); // assume 'k' is defined elsewhere

for(int i=0; i<N; i++)
{
cin >> x; // get the next element

// shift it down while it's larger than existing numbers
for( int j=0; j<k; j++) {
if( x > nums[j] ) {
std::swap( x, nums[j] );
}
}
}
cout<<"nums[k-1]:" << nums[k-1]<<endl;
}

复杂度是 O(N*k),可以让它更快,但我宁愿让它更简单。

关于c++ - 使用 "Sort K number of elements based array"算法的数组中的第 K 个最大数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58372460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com