Попытка MergeSort строки в C ++, но не работает - PullRequest
0 голосов
/ 26 сентября 2019

Попробуйте выполнить слияние строк в c ++, но что-то не так.

Я использую vscode с clang и не вижу никаких ошибок / проблем при компиляции, но он просто останавливается и открывает имя файла "char_traits.h "тогда показывать вот так при запуске кода.

Затем я попытался скомпилировать на codepad.org, и он показывает

std::logic_error: basic_string::_S_construct NULL not valid
Aborted.
#include <iostream>
#include <limits>
using namespace std;

template <typename T> void merge(T *arr, int left, int mid, int right) {
  int leftLength = mid - left + 1;
  int rightLength = right - mid;
  T *L = new T[leftLength];
  T *R = new T[rightLength];

  for (int i = 0; i < leftLength; i++)
    L[i] = arr[left + i];
  for (int i = 0; i < rightLength; i++)
    R[i] = arr[mid + 1 + i];

  L[leftLength] = numeric_limits<T>::max();
  R[rightLength] = numeric_limits<T>::max();

  int leftIndex = 0, rightIndex = 0;
  for (int i = left; i <= right; i++) {
    if (L[leftIndex] <= R[rightIndex]) {
      arr[i] = L[leftIndex];
      leftIndex++;
    } else {
      arr[i] = R[rightIndex];
      rightIndex++;
    }
  }
}

template <typename T> void mergeSort(T *arr, int left, int right) {
  if (left < right) {
    int mid = (left + right) / 2;
    mergeSort(arr, left, mid);
    mergeSort(arr, mid + 1, right);
    merge(arr, left, mid, right);
  }
}

int main() {
  string a[3];
  a[0] = "abc";
  a[1] = "afd";
  a[2] = "fhe";
  mergeSort(a, 0, 2);
  for (int i = 0; i < 3; i++) {
    cout << a[i] << endl;
  }
  return 0;
}

Я потерян.Спасибо!

...