バブルソート用のこのコードはC++で用意されています。最初は乱数を生成し、配列の中に入れます。その後、ソートを行うbubbleSort関数を呼び出します。すべてうまく動作します。しかし、私はバブルの並べ替えがどのようにして数多くの合計比較と数の交換を見つけることができるのか不思議でした。 比較のためにCountBubbleSort整数を作成しました。しかし、私は自分のコードのどの部分を増やすべきか分かりません。私は最初のものの中に2番目のforループの後に追加することを考えていました。私が何を意味するのかご理解いただきたいと思います。それは正しいかどうか?比較の数により、この式n *(n-1))/ 2が定義されます。スワップでは3 *(n-1)です。しかし、どのように私のコードに実装することができますか?助けてくれてありがとう。バブルは、比較とスワップの合計数をソートします。
void swap(double *xp, double *yp)
{
double temp = *xp;
*xp = *yp;
*yp = temp;
}
double *Data;
double* A;
double n, temp;
void generate(int _n, const char *_file);
void read(const char *_file);
void printArray(double arr[], int n);
void bubbleSort(double arr[], int n);
int main()
{
int m;
int CountBubbleSort = 0;
srand(time(NULL));
cout << "Amount of random numbers you want: ";
cin >> m;
cout << "Generating random data ..." << endl;
generate(m, "duom.txt");
cout << "Reading data" << endl;
read("duom.txt");
A = new double[n];
for (int i = 0; i < n; i++) {
A[i] = Data[i];
}
cout << "Randomly generated array" << endl;
printArray(A, n);
// Bubble Sort
bubbleSort(A, n);
cout << "Array after bubble sort" << endl;
printArray(A, n);
return 0;
}
void bubbleSort(double arr[], int n)
{
bool swapped;
for (int i = 0; i < n - 1; i++)
{
swapped = false;
for (int j = 0; j < n - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
swap(&arr[j], &arr[j + 1]);
swapped = true;
}
}
// Should I add CountBubbleSort += i here or not?
if (swapped == false)
break;
}
}
void printArray(double arr[], int n) {
for (int i = 0; i < n; i++) {
cout << A[i] << endl;
}
}
ありがとうございます。小さなリストで試してみてください。期待どおりの比較数を得ているか、デバッガでコードをステップ実行してカウンタが増分されていることを確認してください2つの要素が比較されるたびに – Caleb
助けてくれてありがとう:) – CaL17