私はハーバードのオープンコースウェアに参加していて、宿題の質問を試みています。私は、バブルソートの実装を使用して配列をソートするプログラムをCで作成しました(または作成しようとしました)。終了後、サイズ5、6、3などの配列でテストしました。すべて機能しました。次に、サイズ11の配列でテストしようとしましたが、それがバグアウトを開始したときです。このプログラムは、ユーザーが入力した配列サイズに達した後、配列の数値の取得を停止するように作成されています。しかし、配列サイズ11でテストしたところ、宣言されたサイズを超えて、ユーザーからより多くの値を取得しようとし続けました。それは私に数日間一貫してそれをしました、そして3日目に私は配列サイズ変数を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;
}