我的合并排序函数是吐出 0 而不是对我的列表进行排序

My mergesort function is spitting out 0's instead of ordering my list

本文关键字:我的 排序 列表 合并 函数      更新时间:2023-10-16

我试图做一个合并排序函数,似乎无法理解为什么我的列表打印出"00000100000"。我有一种感觉,它可能是我的辅助数组,我正在传递,但我想保持它在我的代码中,如果可能的话。下面是我的代码:

void merge(int arr[], int aux[], int low, int mid, int high)
{
    int leftStart = low;
    int rightStart = mid+1;
    int auxIndex = low;
    int start = low;
while(leftStart<=mid && rightStart<= high)
{
    if(arr[leftStart]>=arr[rightStart])
    {
        aux[auxIndex] = arr[rightStart];
        auxIndex++;
        rightStart++;
    }
    else
        aux[auxIndex] = arr[leftStart];
        auxIndex++;
        leftStart++;
}
if(leftStart>mid)
{
    for(;rightStart<=high; rightStart++)
    {
        aux[auxIndex] = arr[rightStart];
    }
}
if(rightStart>high)
{
    for(;leftStart<=high; leftStart++)
    {
        aux[auxIndex] = arr[rightStart];
    }
}
for(; start <= high; start++)
    arr[start]=aux[start];
}
void mergeSort(int arr[], int aux[], int low, int high)
{
    int mid;
    if(low<high)
    {
    mid=(low+high)/2;
    mergeSort(arr, aux, low, mid);
    mergeSort(arr, aux, mid+1, high);
    merge(arr,aux, low, mid, high);
    }
}

int main(int argc, char *argv[]) {
int arr[20]={6,4,3,2,1,7,8,9,5,6,7,5};
for(int i = 0; i<12; i++)
    cout<<arr[i];
int aux[20];
mergeSort(arr, aux, 0, 12);
for(int i = 0; i<12; i++)
    cout<<arr[i];
    return 0;
}

valgrind或等效的分析工具下运行程序。您将发现代码中存在与数组访问相关的直接错误。