我已经创建了类
void NmbSetA::sort(){
bool swaped = false;
int minPos, tmp;
for(int i = 0; i < (size_ - 1); i++){
minPos = i;
for(int j = (i + 1); j < size_; j++){
if(dataField_[j] < dataField_[minPos]){
minPos = j;
swaped = true;
}
}
if(swaped){
tmp = dataField_[i];
dataField_[i] = dataField_[minPos];
dataField_[minPos] = tmp;
}
}
}
还有班级
void NmbSetA::shuffle(){
for(int i=size_-1;i>=1;i--){
int j = rand()%size_;
int tmp;
tmp=dataField_[i];
dataField_[i]=j;
dataField_[j]=tmp;
}
我的输出是这样的,我能改进什么呢?
turn 1:
shuffled: []
sorted : []
turn 2:
shuffled: [9180128]
sorted : [0]
turn 3:
shuffled: [0, 10]
sorted : [0, 2]
turn 4:
shuffled: [11, 6, 7]
sorted : [0, 1, 2]
turn 5:
shuffled: [0, 2, 1, 9]
sorted : [0, 1, 2, 2]
turn 6:
shuffled: [5, 8, 7, 0, 7]
sorted : [0, 1, 2, 3, 5]
它应该排出一个从1到n-1的洗牌数组,并对其进行排序。 数组的创建方式是给定的,不能更改。 我只应该添加方法来对创建的数组进行排序和洗牌。 从最低到最高排序。
你可以用STL来解决你的问题。 STL具有排序和洗牌算法:
constexpr std::size_t size;
class NmbSetA {
public:
NmbSetA();
void sort();
void shuffle() {
std::shuffle(dataField_, dataField_ + size_, g);
}
private:
std::random_device rd;
std::mt19937 g;
int dataField_[size];
std::size_t size_ = size;
};
NmbSetA::NmbSetA() : g(rd()) {}
void NmbSetA::sort() {
std::sort(dataField_, dataField_ + size_);
}
void NmbSetA::shuffle() {
std::shuffle(dataField_, dataField_ + size_, g);
}