gpt4 book ai didi

c++ - 主要跳过功能?

转载 作者:行者123 更新时间:2023-11-28 05:31:29 25 4
gpt4 key购买 nike

我正在尝试通过一个免费的在线类(class)自学算法和数据结构的基础知识,因此,我认为它会给它一个合并排序的第一枪。这实际上不会用于任何事情,所以它很草率,但我似乎遇到了一个问题,即 main 没有调用 MergeSort 函数。

输出是 00000000,(我假设是因为数组从未被分配任何东西)。当我通过 gdb 运行程序时,程序似乎到达了那一行,然后完全跳过该函数并直接进入打印数组的循环。

有什么想法吗?我错过了什么愚蠢的东西吗?

#include <iostream>
using namespace std;

int *MergeSort(int array[], int sizeOf);

int main(){
int numbers[8] = {5, 4, 1, 8, 7, 2, 6, 3};

int *array = MergeSort(numbers, 8);

for (int i = 0; i < 8; i++)
cout << array[i];

return 0;

}

int *MergeSort(int array[], int sizeOf){

int *leftArr = new int[sizeOf/2]; // Build arrays to split in half
int *rightArr = new int[sizeOf/2];

if (sizeOf < 2){ // Base case to end recursion
return array;
}

else{

for (int i = 0; i < (sizeOf/2); i++){ // Left gets first half
leftArr[i] = array[i];
}

int j = (sizeOf/2) - 1; // Set point to start building 2nd

for (int i = sizeOf; i >= (sizeOf/2); i--){
rightArr[j] = array[i]; // Build other half of array
j--;
}

leftArr = MergeSort(leftArr, sizeOf/2); // Call Recursive functions
rightArr = MergeSort(rightArr, sizeOf/2);

}

static int *newArray = new int[sizeOf]; // Sorted array to Build
int k = 0; // Iterators to build sorted func
int m = 0;
int p = 0;

while (p < sizeOf){
if (leftArr[k] < rightArr[m]){ // Left Arr's current value is less
newArray[p] = leftArr[k]; // right arr's current calue
k++;
}
else if (leftArr[k] >= rightArr[m]){
newArray[p] = rightArr[k];
m++;
}
p++;
}

//for (int i = 0; i < 8; i++)
// cout << newArray[i] << endl;

return newArray; // Return address to new array

}

最佳答案

MergeSort() 中存在一个基本的设计问题:

  • 你的算法是递归的(这很完美)
  • 不幸的是,它返回 newArray,它是 static。这意味着所有调用都使用同一静态变量的同一实例(并覆盖递归调用返回的实例)。

您需要通过使 newArray 成为非静态的来解决这个问题。并且在函数结束时,您需要delete[] 递归调用返回的数组,以避免内存泄漏。

关于c++ - 主要跳过功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39428775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com