请帮助我找出我的 algo2() 函数出了什么问题。算法2的过程如下:
- 将 N 个数字读入向量
- 按降序对向量元素进行排序
- 一个一个地读取每个剩余的元素
- 当一个新元素到达时,如果它小于向量中的第 k 个元素,则将其忽略
- 否则,它将被放置在数组中的正确位置,从向量中弹出一个元素
- 最后,将打印第 k 个位置的元素
我已经尽力了;但每次我执行 algo2() 函数时,它都会停止执行。您的帮助将不胜感激。谢谢你。
#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <vector>
using namespace std;
vector<int> input()
{
vector<int> nums;
int input;
cout << "Please enter some integers (type 12345 to end):\n";
do
{
cin >> input;
nums.push_back(input);
}
while(input!=12345);
nums.pop_back(); //omits terminator value from the vector
return nums;
}
vector<int> sorter(vector<int> nums,int ilan)
{
int index,ctr;
for(ctr=1;ctr<=pow((ilan-1),2);ctr++)
{
for(index=1;index<ilan;index++)
{
if(nums[index]>nums[index-1])
{
nums[index]+=nums[index-1];
nums[index-1]=nums[index]-nums[index-1];
nums[index]-=nums[index-1];
}
}
}
return nums;
}
void cardinal(int k)
{
if(k==11||k==12||k==13)
cout << "th";
else
{
while(k>10)
{
k=k%10;
}
switch(k)
{
case 1: {cout << "st"; break;}
case 2: {cout << "nd"; break;}
case 3: {cout << "rd"; break;}
default: cout << "th";
}
}
}
void output(vector<int> nums,int k)
{
cout << "The " << k;
cardinal(k);
cout << " largest number is " << nums[k-1];
}
void algo2(vector<int> nums,int k)
{
int index;
int cursor;
nums = sorter(nums,k);
for(cursor=k;cursor+1<nums.size();)
{
if(nums[k-1]<nums[cursor])
{
for(index=0;index<(k-1);index++)
{
if(nums[cursor]>nums[index])
{
nums.insert(nums.begin()+index,nums[cursor]);
if(k+2==nums.size())
nums.erase(nums.begin()+k+1);
else
nums.erase(nums.begin()+k,nums.begin()+k+1);
break;
}
}
}
else
{
nums.erase(nums.begin()+cursor);
break;
}
}
output(nums,k);
}
int main()
{
vector<int> nums;
int choice=0, k=0;
cout << "Type the algorithm number you'll use (1 or 2): ";
cin >> choice;
cout << "Input k: ";
cin >> k;
//Algorithm 1
if(choice==1)
{
nums = input();
nums = sorter(nums,nums.size());
output(nums,k);
}
//Algorithm 2
else if(choice==2)
{
nums = input();
algo2(nums,k);
}
cout << endl << endl;
system("pause");
return 0;
}