[ad_1]
#include <iostream> using namespace std; void mr(int arr[], int p, int q, int r) { int n1 = q - p + 1; int n2 = r - q; int lower[n1], higher[n2]; for (int i = 0; i < n1; i++){ lower[i] = arr[p + i];} for (int j = 0; j < n2; j++){ higher[j] = arr[q + 1 + j];} int i, j, k; i = 0; j = 0; k = p; while (i < n1 && j < n2) { if (lower[i] <= higher[j]) { arr[k] = lower[i]; i++; } else { arr[k] = higher[j]; j++; } k++; } while (i < n1) { arr[k] = lower[i]; i++; k++; } while (j < n2) { arr[k] = higher[j]; j++; k++; } } void ms(int arr[], int low, int high) { if (low < high) { int m = low+(high-low)/2; cout << endl; cout << "["; for(int a = low; a <= m; a++){ cout << arr[a] << " "; } cout << "]"; cout << "|"; cout << "["; for(int b = m + 1; b <= high; b++){ cout << arr[b] << " "; } cout << "]"; ms(arr, low, m); ms(arr, m + 1, high); mr(arr, low, m, high); cout << endl; cout << "["; for(int c = low; c <= high; c++){ cout << arr[c] << " "; } cout << "]"; } } int main() { system("Color 07"); char yn,ord; int numel, arr[11],sz; cout<<"Lance Grayson D. Musngi\nBSIT 2 - C\n\n"<<endl; cout<<"\t\t\t==================================="<<endl; cout<<"\t\t\t|::::::::::MERGE SORTING::::::::::|"<<endl; cout<<"\t\t\t===================================\n\n\n"<<endl; cout<<"Enter number of elements you wish to be sorted (Min.5 - Max.12): "; cin>>numel; if(numel>=5&&numel<=12){ system("cls"); cout<<"Enter "<<numel<<" elements to be sorted:\n"; sz = numel; for (int i = 0; i < numel; i++){ cout<<"Element ["<<i+1<<"]: "; cin>>arr[i]; } cout<<"\n------------------------------------------------------"<<endl; ms(arr, 0, numel-1); cout<<"\n------------------------------------------------------"<<endl; cout<<"[A]scending Merge order\n[D]escending Merge order"<<endl; cin>>ord; if (ord=='a'||ord=='A'){ cout << "[A]scending Merge Order Array: \n"; for (int i = 0; i < sz; i++){ cout << arr[i] << "\t"; } } else if(ord=='d'||ord=='D'){ cout << "[D]escending Merge Order Array: \n"; for (int i = sz-1; i > -1; i--){ cout << arr[i] << "|\t"; }
私が試したこと:
コンバーターを使用してみましたが、現在は機能しています
解決策 1
これはコード変換サービスではありません。コードを翻訳するためにここにいるわけではありません。
仮にそうしたとしても、最終的にターゲット言語の「良いコード」にはなりません。それらは非常に異なるフレームワークに基づいており、ある言語で何かを機能させるものが必ずしも別の言語に直接「翻訳」されるとは限りません。
そのため、最終的には非常に貧弱なコードになり、メンテナンスが不可能ではないにしても難しく、適切にアップグレードできず、元のコードが変更された場合に大きな頭痛の種になります。 そして、「箱から出してすぐに」機能しない場合、デバッグするのは悪夢です。
代わりに、ソース コードを新しいアプリの仕様とターゲット言語/フレームワークの仕様として使用し、オリジナルを “テンプレート” として使用してゼロから記述します。 はるかに優れた結果が得られ、長期的には多くの時間を節約できます。
この場合、C++ ヘッダーが追加された状態で既に何かから C に変換されているように見えます。これは、そもそもコードの品質が非常に悪いためです。
解決策 2
プログラムの説明が抜けていたり、エラーの説明がなかったので、ここでのヘルプは不必要に複雑になっています。 関数は明らかにマージソートアルゴリズムです。
エラーとして、C++ のさまざまな配列がこのように機能しないことがすぐにわかります。 最初に、変数を使用して配列を宣言しようとするコードが使用されます。 これは C では機能する可能性がありますが、C++ では機能しません。 ここで、たとえば new() が役立ちます。
// int lower[n1], higher[n2]; int *lower = new int[n1]; int *higher = new int[n2];
さらに下では、明らかに大きくなりすぎる可能性のある定数を使用してフィールドが宣言されています。
int numel, arr[11], sz; if (numel >= 5 && numel <= 12) { for (int i = 0; i < numel; i++) cin >> arr[i]; }
どうやらプログラムは完全ではないようです。 並べ替え機能は一見動作しているように見えます。
注: 非常に一般的なソート アルゴリズムを別の言語に変換することは、練習しない限り意味がないようです。 ドイツ語のウィキペディアのページには、たとえば Java 版もあります。 連鎖リストを使用した反復実装も、C++ ではるかに読みやすくなります。
マージソート – ウィキペディア、フリー百科事典[^]
[ad_2]
コメント