在C+中实现合并排序+;使用向量 我想在C++中实现一个合并排序。我没有看具体的例子,因为我想自己尝试一下。下面是我用向量得出的结论: int *mergeSort(int *a, int n) { //some debugging

在C+中实现合并排序+;使用向量 我想在C++中实现一个合并排序。我没有看具体的例子,因为我想自己尝试一下。下面是我用向量得出的结论: int *mergeSort(int *a, int n) { //some debugging,c++,algorithm,sorting,C++,Algorithm,Sorting,在C+中实现合并排序+;使用向量 我想在C++中实现一个合并排序。我没有看具体的例子,因为我想自己尝试一下。下面是我用向量得出的结论: int *mergeSort(int *a, int n) { //some debugging info for me cout << "Merge Sort called with: "; for(int i = 0; i < n; i++){ cout << *(a +

在C+中实现合并排序+;使用向量 <>我想在C++中实现一个合并排序。我没有看具体的例子,因为我想自己尝试一下。下面是我用向量得出的结论:

int *mergeSort(int *a, int n) {
    //some debugging info for me
    cout << "Merge Sort called with: ";

    for(int i = 0; i < n; i++){
        cout << *(a + i) << " ";
    }

    cout << " and size: " << n << endl;

    //base case
    if (n == 1) {
        return a;
    }

    //spliting the arrays
    vector<int> firstArray(a, a + n/2);
    vector<int> secondArray(a + n/2, a + n);


    int *firstResultPointer = mergeSort(&(firstArray[0]), firstArray.size());
    vector<int> resultFirst(firstResultPointer, firstResultPointer + n/2);

    int *secondResultPointer = mergeSort(&(secondArray[0]), secondArray.size());
    vector<int>resultSecond(secondResultPointer, secondResultPointer + n / 2);

    vector<int> resultArray(n);

    int i = 0;
    int j = 0;

    while (i + j < n) {
        //when exit the size of the vector
        if(firstArray.size() <= i){
            while(j < secondArray.size()){
                resultArray[(i + j)] = secondArray[j];
                j++;
            }
            break;
        }
        else if (secondArray.size() <= j){
            while(i < firstArray.size()){
                resultArray[(i + j)] = firstArray[i];
                i++;
            }
            break;
        }
        else {
            //normal case merge
            if (firstArray[i] < secondArray[j]) {
                resultArray[(i + j)] = firstArray[i];
                i++;
            }
            else {
                resultArray[(i + j)] = secondArray[j];
                j++;
            }
        }
    }

    return &(resultArray[0]);
}
int*mergeSort(int*a,int-n){
//给我一些调试信息

cout“当我在达到最低级别后进行调试,然后开始恢复时,它就会开始到处跳跃”您是否启用了优化?
mergeSort
返回指向局部变量的指针。
resultArray
在函数返回时被销毁,指针变为悬空。因此,您的程序在对象生命周期结束后通过访问对象的方式表现出未定义的行为。除了返回值问题之外e(实际上你没有用它来做任何实质性的事情),你的
mergeSort
是一个非常精细的no-op。它没有副作用。它忙于在局部变量中的元素之间来回移动,但从未触及原始数组。谢谢。我刚刚删除了resultArray变量,并用原始数组对其进行了更改,效果很好。