首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何访问我所指向的数组中的所有元素,并在mergeSort函数调用期间更改它们?

如何访问我所指向的数组中的所有元素,并在mergeSort函数调用期间更改它们?
EN

Stack Overflow用户
提问于 2019-02-18 04:12:10
回答 1查看 35关注 0票数 0

我有一个测试过的mergeSort函数,当我在main()中有这个函数时,它就可以工作了。我现在正试图将它实现到一个类中,但是当我打印出排序后的数组元素时,它们并没有排序。我认为我的问题在于如何访问我的数组元素,以及我对它们做了什么。

Main.cpp

代码语言:javascript
运行
复制
#include <iostream>
#include "Sort.h"

using namespace std;

int main() {

    Sort temp(10);

    temp.InitArray();

    cout << "Unsorted: ";
    temp.Print();

    temp.MergeSort(0, 9);

    cout << "Sorted: ";
    temp.Print();

    cout << "end" << endl;
    cin.get();

    return 0;
}

Sort.h

代码语言:javascript
运行
复制
#ifndef __SORT__
#define __SORT__

class Sort
{
public:
    Sort(int arraySize);
    ~Sort();

    void InitArray();
    void MergeSort(int low, int high);
    void Print();
private:
    int *myArray;
    int size;

    void MergeSortRecursionHelper(int indexL, int indexM, int indexH);
};

#endif

Sort.cpp

代码语言:javascript
运行
复制
#include <random>
#include <iostream>
#include "Sort.h"

Sort::Sort(int arraySize){
    myArray = new int[arraySize];
    size = arraySize;
}

Sort::~Sort(){
    delete [] myArray;
}

void Sort::InitArray() {
    for(int i = 0; i < size; i++){
        myArray[i] = rand() % 100;
    }
}
void Sort::MergeSort(int low, int high) {
    //base case
    if(myArray[high] <= myArray[low]){
        return;
    }
    int mid = (low + high) / 2;
    MergeSort(low, mid);
    MergeSort(mid + 1, high);

    MergeSortRecursionHelper(low, mid, high);
}

void Sort::MergeSortRecursionHelper(int indexL, int indexM, int indexH)
{        
    int mSize = indexH - indexL + 1;
    int* mergedData = new int[mSize];
    int mergedIndex = 0;
    int rightInd = indexM + 1;
    int leftInd = indexL;

    while(leftInd <= indexM && rightInd <= indexH){
        if(myArray[indexL] < myArray[rightInd]){
            mergedData[mergedIndex++] = myArray[leftInd++];
        }else{
            mergedData[mergedIndex++] = myArray[rightInd++];
        }
    }

    while(leftInd <= indexM){
        mergedData[mergedIndex++] = myArray[leftInd++];
    }
    while(rightInd <= indexH){
        mergedData[mergedIndex++] = myArray[rightInd++];
    }

    for(int i = indexL; i < indexH + 1; i++){
        myArray[i] = mergedData[i - indexL];
    }
    delete[] mergedData;

}

void Sort::Print(){
    for(int i = 0; i < size; i++){
        std::cout << " " << myArray[i];
    }
    std::cout << std::endl;
}
EN

Stack Overflow用户

回答已采纳

发布于 2019-02-18 04:20:30

您在if中的第一次签入不正确。例如,输入{8,4,100,7}并不意味着它是由于7 < 8而排序的。

代码语言:javascript
运行
复制
void Sort::MergeSort(int low, int high) {
    //base case
    if(myArray[high] <= myArray[low]){
        return;
    }
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54737243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档