提问者:小点点

我需要实现一个简单的shuffle并将alogrithm作为一个类进行排序


我已经创建了类

   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的洗牌数组,并对其进行排序。 数组的创建方式是给定的,不能更改。 我只应该添加方法来对创建的数组进行排序和洗牌。 从最低到最高排序。


共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);
}

相关问题