我正在参加哈佛的公开课件并尝试做作业题。我用 C 编写(或试图)编写一个程序来使用冒泡排序实现对数组进行排序。完成后,我用大小为 5、6、3 等的数组对其进行了测试。一切正常。然后,我尝试使用大小为 11 的数组对其进行测试,然后它就开始出现问题。该程序被编写为在达到用户输入的数组大小后停止获取数组的数字。但是,当我使用数组大小 11 对其进行测试时,它会不断尝试从用户那里获取更多值,超过声明的大小。它对我持续了几天,然后第三天我尝试将数组大小变量初始化为 0,然后突然之间它会继续遇到相同的问题,数组大小为 4 或更大。我取消了初始化,它继续对超过 4 的数组大小做同样的事情。我不明白为什么该程序适用于某些数组大小而不适用于其他数组大小。我使用 main 从键盘获取数组大小和值,然后将其传递给我编写的名为 sort 的函数。请注意,这不是家庭作业或任何我需要获得学分的东西,它仅用于学习。任何意见将不胜感激。谢谢。
/****************************************************************************
* helpers.c
*
* Computer Science 50
* Problem Set 3
*
* Helper functions for Problem Set 3.
***************************************************************************/
#include <cs50.h>
#include <stdio.h>
#include "helpers.h"
void
sort(int values[], int n);
int main(){
printf("Please enter the size of the array \n");
int num = GetInt();
int mystack[num];
for (int z=0; z < num; z++){
mystack[z] = GetInt();
}
sort(mystack, num);
}
/*
* Sorts array of n values.
*/
void
sort(int values[], int n)
{
// this is a bubble sort implementation
bool swapped = false; // initialize variable to check if swap was made
for (int i=0; i < (n-1);){ // loops through all array values
if (values[i + 1] > values [i]){ // checks the neighbor to see if it's bigger
i++; // if bigger do nothing except to move to the next value in the array
}
else{ // if neighbor is not bigger then out of order and needs sorting
int temp = values[i]; // store current array value in temp variable for swapping purposes
values[i] = values[i+1]; //swap with neighbor
values[i+1] = temp; // swap neighbor to current array value
swapped = true; // keep track that swap was made
i++;
}
// if we are at the end of array and swap was made then go back to beginning
// and start process again.
if((i == (n-1) && (swapped == true))){
i = 0;
swapped = false;
}
// if we are at the end and swap was not made then array must be in order so print it
if((i == (n-1) && (swapped == false))){
for (int y =0; y < n; y++){
printf("%d", values[y]);
}
// exit program
break;
}
} // end for
// return;
}