因此,我正在制作一个选择排序程序,其中我必须输入两个值:一个用于数组中使用的数字,另一个用于随机数生成器的种子。我对如何调整使用的数字有些困惑,因为我们可以放入的最大元素数是15。该数组当前有8。每个元素应该是20到40之间的数字。
#include <iostream>
using namespace std;
int selectionSort(int[], int);
int selectionSort(int numbers[], int numbersSize) {
int i = 0;
int j = 0;
int indexSmallest = 0;
int temp = 0; // Temporary variable for swap
for (i = 0; i < numbersSize - 1; ++i) {
// Find index of smallest remaining element
indexSmallest = i;
for (j = i + 1; j < numbersSize; ++j) {
if (numbers[j] < numbers[indexSmallest]) {
indexSmallest = j;
}
}
// Swap numbers[i] and numbers[indexSmallest]
temp = numbers[i];
numbers[i] = numbers[indexSmallest];
numbers[indexSmallest] = temp;
}
return indexSmallest;
}
int main() {
int numbers[] = {10, 2, 78, 4, 45, 32, 7, 11, 0, 0, 0, 0, 0, 0, 0};
const int NUMBERS_SIZE = 15;
int i = 0;
int nums = 0;
int seed = 0;
cin >> nums;
cin >> seed;
srand(seed);
for (int i = 0; i < nums; i++) {
numbers[i] = (rand() % 20) + 20;
}
cout << "UNSORTED: ";
for (i = 0; i < nums; ++i) {
cout << numbers[i] << " ";
}
cout << endl;
selectionSort(numbers, nums);
cout << "SORTED: ";
for (i = 0; i < nums; ++i) {
cout << numbers[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
唯一的问题是生成的随机数是错误的数字。例如,当我输入“ 10 100”(数组中使用的数字为10,种子为100)时,它将输出
未分类:25 36 35 24 24 34 38 22 29 29
排序:22 24 24 25 29 29 34 35 36 38
何时应该输出
未分类:28 28 34 37 36 27 33 36 36 39
排序:27 28 28 33 34 36 36 36 37 39
我不太确定如何解决此问题。
答案 0 :(得分:2)
关于此代码,有很多话要说:
numbers[]
中的初始值当然会被覆盖。NUMBERS_SIZE
未使用。std::vector<>
或动态创建数组,或者至少检查给定值的数量不超过数组大小。rand()
是一个随机数生成器,srand()
为这些随机数设置某种种子。可以保证,使用相同的种子,您将始终获得相同的随机数序列。using namespace std;
您的问题的答案将是:不要使用随机数。
答案 1 :(得分:-1)
您可以尝试rand函数
/* initialize random seed: */
srand (time(NULL));
/* generate random number betwee 1 and 10: */
iSecret = rand() % 10 + 1;
您还需要包括3个库
#include <stdio.h> /* printf, scanf, puts, NULL */
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */