質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

923閲覧

C++ マージソート

syachi

総合スコア3

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2022/05/26 08:00

編集2022/05/26 10:25

C++でテキストファイルに入力した整数をマージソートで昇順に羅列するプログラムを作成したいのですが、今のままではソートされずに入力した整数がそのまま表示されます。

C++

1#include <iostream> 2#include <vector> 3 4using namespace std ; 5typedef vector<int> ARRAY ; 6 7static void merge_sort(ARRAY & data, int i, int j){ 8 if (i>=j) return; 9 int k = i; 10 int mid = (i+j)/2; 11 int n = mid + 1; 12 13 merge_sort(data, i, mid); 14 merge_sort(data, n, j); 15 16 ARRAY temp; 17 for(;;){ 18 if(data[i] <= data[n]){ 19 temp.push_back(data[i]); 20 i++ ; 21 if(i>mid){ 22 for(;n<=j;n++) temp.push_back(data[n]); 23 break ; 24 } 25 }else{ 26 temp.push_back(data[n]); 27 n++; 28 if(n>j){ 29 for(;i<=mid; i++) temp.push_back(data[i]); 30 break; 31 } 32 } 33 } 34} 35int main (){ 36 ARRAY data ; 37 int i ; 38 while(cin >> i) data.push_back(i) ; 39 int n = data.size() ; 40 merge_sort(data,0,n-1) ; 41 for( auto i : data) cout << i << endl ; 42 return 0 ; 43} 44

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/05/26 08:10

このままではコードが読みづらいので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答2

0

ベストアンサー

マージ結果を temp に入れただけで、data にはコピーしていませんね。
for (i = 0; k <= j; k++) data[k] = temp[i++]; を追加してみてください。

投稿2022/05/26 15:36

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

最後の出力の部分のコードが分かりません。

for( auto i : data) cout << i << endl ;
範囲for(range-based for)構文がわからんのでしょうか。

for( auto i : data) // data内の各要素iに対し (i の型はコンパイラの推論に従う)
cout << i << endl ; // i をプリントする。

投稿2022/05/26 08:07

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syachi

2022/05/26 10:22

回答ありがとうございます。 今のコードだとソートされずに入力した整数がそのまま表示されるのですがどこを変えるべきなのか分かりません。
episteme

2022/05/26 10:29

関数 merge_sort() にバグがあるからでしょうね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問