Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

วิธีสับเปลี่ยนลำดับ std::vector ใน C++

การสับเปลี่ยนลำดับ vector สามารถทำได้ด้วยอัลกอริทึม Fisher-Yates shuffle ซึ่งจะทำการสแกน vector แบบเชิงเส้น จากนั้นสลับแต่ละสมาชิกกับสมาชิกสุ่มหนึ่งตัวจากสมาชิกที่เหลือทั้งหมด รวมถึงตัวมันเองด้วย

อัลกอริทึม

เริ่มต้น
  ประกาศฟังก์ชัน show()
  ส่ง constructor ของ vector เป็นพารามิเตอร์ในฟังก์ชัน show()
  for (auto const& i: input)
    แสดงค่าของตัวแปร i
  ประกาศ v เป็น vector
  กำหนดค่าเริ่มต้นให้ v vector แบบอาร์เรย์
  ประกาศตัวแปร size เป็น integer
  เรียกฟังก์ชัน size() เพื่อหาขนาดของ vector
  กำหนด size = v.size()
  for (int i = 0; i < size - 1; i++)
    int j = i + rand() % (size - i)
    เรียกฟังก์ชัน swap() เพื่อสลับค่าของ v[i] และ v[j]
  แสดงข้อความ "สมาชิกหลังสับเปลี่ยนแล้ว"
  เรียกฟังก์ชัน show() เพื่อแสดงค่าของ v vector ที่สับเปลี่ยนแล้ว
สิ้นสุด

ตัวอย่างโค้ด

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;

void show(vector<int> const &input) {
    for (auto const& i: input) {
        std::cout << i << " ";
    }
}

int main() {
    srand(time(0)); // เริ่มต้น random seed
    vector<int> v = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    int size = v.size();
    for (int i = 0; i < size - 1; i++) {
        int j = i + rand() % (size - i);
        swap(v[i], v[j]);
    }
    cout << "สมาชิกหลังสับเปลี่ยนแล้ว" << endl;
    show(v);
    return 0;
}

ผลลัพธ์

สมาชิกหลังสับเปลี่ยนแล้ว 2 8 5 3 1 9 4 7 6