我已经开始学习 c 并想用它来编写 bogosort 程序。我编码了大部分部分,但当我开始时,我遇到了分段错误错误,但不知道为什么。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
int tries = 0;
int bogo[7];
int length = sizeof(bogo) / sizeof(bogo[0]);
void setBogo();
void printBogo();
bool bogoFinished();
void sortNew();
int main() {
setBogo();
while (!bogoFinished())
sortNew();
printBogo();
printf("Versuche benötigt: %d", tries);
return 0;
}
void setBogo() {
srand(time(NULL));
for (int i = 0; i < length; i++)
bogo[i] = rand() % 100;
}
void printBogo() {
for (int i = 0; i < length; i++)
printf("Pos.: %d, Value: %d\n", i, bogo[i]);
}
bool bogoFinished() {
int letzte = 0;
for (int i = 1; i < length; i++)
if (bogo[i] < bogo[letzte])
return false;
else letzte = i;
return true;
}
void sortNew() {
srand(time(NULL));
tries++;
for (int i = 0; i < length; i++) {
int value = bogo[i];
int ran = rand();
bogo[i] = bogo[ran];
bogo[ran] = value;
}
}
代码如何工作: 首先,我用随机整数设置数组中的所有位置。然后,在 while 循环中检查数组是否已排序。如果是,则数组将再次随机排序。初始化数组的算法之前有效,所以我认为这是在度假部分的某个地方引起的。
罪魁祸首是
bogo[i] = bogo[ran];
(以及下面一行),因为rand()
返回0到RAND_MAX
范围内的值,这是一个未指定的,但通常相当大的整数;肯定比你的长度为 7 的数组大。rand() % length
。