gpt4 book ai didi

c++ - 如何使用任何排序算法在每次交换后打印到控制台?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:15:23 24 4
gpt4 key购买 nike

在我的计算机科学导论课上,我开始学习排序算法的基础知识。到目前为止,我们已经了解了冒泡排序、选择排序和插入排序。

今天下课后,老师要求我们通过添加代码来“增强”程序,以便在排序过程中每次交换后打印出 vector/数组。对于如何实现这一点,我完全不知所措。我在想类似的东西:

if (swapped) { cout << vec << " "; }

但即使没有尝试,我也确定这行不通。很感谢任何形式的帮助。到目前为止,这是我的代码:

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

vector<int> createVec(int n) {
unsigned seed = time(0);
srand(seed);
vector<int> vec;
for (int i = 1; i <= n; ++i) {
vec.push_back(rand() % 100 + 1);
}
return vec;
}

void showVec(vector<int> vec) {
for (int n : vec) {
cout << n << " ";
}
}

void bubbleSort(vector<int> &vec) {
int n = vec.size();
bool swapped = true;
while (swapped) {
swapped = false;
for (int i = 1; i <= n-1; ++i) {
if (vec[i-1] > vec[i]) {
swap(vec[i-1], vec[i]);
swapped = true;
}
}
}
}

void selectionSort(vector<int> &vec) {
int n = vec.size();
int maxIndex;
for (int i = 0; i <= n-2; ++i) {
maxIndex = i;
for (int j = i+1; j <= n-1; ++j) {
if (vec[j] < vec[maxIndex]) {
maxIndex = j;
}
}
swap(vec[i], vec[maxIndex]);
}
}

int main()
{
vector<int> numbers = createVec(20);
showVec(numbers);
cout << endl;
//bubbleSort(numbers);
selectionSort(numbers);
showVec(numbers);
return 0;
}

最佳答案

例如在被调用的函数selectionSort中替换这条语句

swap(vec[i], vec[maxIndex]);

对于下面的语句

if ( i != maxIndex )
{
swap(vec[i], vec[maxIndex]);
showVec( vec );
cout << endl;
}

此外,函数 showVec 应该将参数声明为具有常量引用类型

void showVec( const vector<int> &vec) {
for (int n : vec) {
cout << n << " ";
}

关于c++ - 如何使用任何排序算法在每次交换后打印到控制台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47550061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com