C++でコードを書くのは初めてです。
マージソートを実装したく、下記のコードを書いてみたのですがうまくいきません。
具体的に言うとソートされておらず、入力したままの配列が表示されます。
詳しい方いらっしゃったらご教授お願い致します。
lang
1#include<iostream> 2#include<limits> 3 4void mergeSort(int* A, int left, int right); 5using namespace std; 6int ct=0; 7int main() { 8 int* S; 9 int n; 10 cin >> n; 11 S = new int[n]; 12 for (int i = 0; i < n; i++) { 13 cin >> S[i]; 14 } 15 /*for (int i = 0; i < n; i++) { 16 cout << S[i]; 17 cout << " "; 18 }*/ 19 20 mergeSort(S,S[0],S[n-1]); 21 22 for (int i = 0; i < n-1; i++) { 23 cout << S[i]; 24 cout << " "; 25 } 26 cout << S[n - 1] << endl; 27 cout << ct<<endl; 28} 29 30void merge(int* A ,int left, int mid, int right) { 31 int n1 = mid - left; 32 int n2 = right - mid; 33 int* L; 34 int* R; 35 L = new int[n1]; 36 R = new int[n2]; 37 for (int i = 0; i < n1 - 1; i++) { 38 L[i] = A[left + i]; 39 } 40 for (int i = 0; i < n2 - 1; i++) { 41 R[i] = A[mid + i]; 42 } 43 L[n1] = INFINITY; 44 R[n2] = INFINITY; 45 int i = 0; 46 int j = 0; 47 48 for (int k = left; i < right - 1; i++) { 49 if (L[i] <= R[j]) { 50 A[k] = L[i]; 51 i = i + 1; 52 ct++; 53 } 54 else { 55 A[k] = R[j]; 56 j = j + 1; 57 } 58 } 59} 60 61void mergeSort(int* A, int left, int right) { 62 if (left + 1 < right) { 63 int mid = (left + right) / 2; 64 mergeSort(A, left, mid); 65 mergeSort(A, mid, right); 66 merge(A, left, mid, right); 67 } 68}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/02 09:07
2018/07/02 10:29
2018/07/02 11:28