源代碼,歡迎白嫖
StackSort.h:
#include<vector>
#include<stack>
#pragma once
class StackSort
{
public:
explicit StackSort() {}
void Init(std::vector<int> vec_num);
std::vector<int> SortBig(int sort_num);
std::vector<int> SortSmall(int sort_num);
private:
std::vector<int> vec_num_;
};
StackSort.cpp:
#include "StackSort.h"
void StackSort::Init(std::vector<int> vec_num)
{
vec_num_ = vec_num;
}
std::vector<int> StackSort::SortBig(int sort_num)
{
std::vector<int> result;
std::stack<int> stk_result;
for (int i = 0; i < vec_num_.size(); i++)
{
if (!stk_result.empty())
{
std::stack<int> stk_tmp;
int cur_num = stk_result.top();
if (cur_num >= vec_num_[i])
{
continue;
}
while (cur_num <= vec_num_[i])
{
stk_tmp.push(cur_num);
stk_result.pop();
if (!stk_result.empty())
{
cur_num = stk_result.top();
}
else
{
break;
}
}
stk_result.push(vec_num_[i]);
while (!stk_tmp.empty() && stk_result.size() < sort_num)
{
stk_result.push(stk_tmp.top());
stk_tmp.pop();
}
}
else
{
stk_result.push(vec_num_[i]);
}
}
while (!stk_result.empty())
{
result.push_back(stk_result.top());
stk_result.pop();
}
return result;
}
std::vector<int> StackSort::SortSmall(int sort_num)
{
std::vector<int> result;
std::stack<int> stk_result;
for (int i = 0; i < vec_num_.size(); i++)
{
if (!stk_result.empty())
{
std::stack<int> stk_tmp;
int cur_num = stk_result.top();
if (cur_num <= vec_num_[i])
{
continue;
}
while (cur_num >= vec_num_[i])
{
stk_tmp.push(cur_num);
stk_result.pop();
if (!stk_result.empty())
{
cur_num = stk_result.top();
}
else
{
break;
}
}
stk_result.push(vec_num_[i]);
while (!stk_tmp.empty()&&stk_result.size() < sort_num)
{
stk_result.push(stk_tmp.top());
stk_tmp.pop();
}
}
else
{
stk_result.push(vec_num_[i]);
}
}
while (!stk_result.empty())
{
result.push_back(stk_result.top());
stk_result.pop();
}
return result;
}
main:
#include<vector>
#include"StackSort.h"
int main()
{
int a[] = { 8,6,1,10,5,3,9,2,7,4 };
std::vector<int> vec(a, a + 10);
StackSort s_sort;
s_sort.Init(vec);
std::vector<int> result = s_sort.SortBig(3);
for (int i = 0; i < result.size(); i++)
{
printf("%d,", result[i]);
}
printf("\n");
printf("hello world\n");
return 1;
}
效果展示: