合并排序代码 c++

Merge sorting code c++

本文关键字:c++ 代码 排序 合并      更新时间:2023-10-16

这是我使用 C++ 的合并排序算法的代码,它实际上可以编译,但它没有给出正确的结果,我多次浏览了代码,但逻辑对我来说似乎是正确的,所以如果有人可以帮助我,那就太好了:

#include <iostream>
using namespace std;
void merge(int left[], int right[], int a[], int L_lengnth, int R_length){
    int l = L_lengnth;
    int r = R_length;
    int i = 0;
    int j = 0;
    int k = 0;
    while(i<l && j<r){
        if(left[i]<right[j]){
            a[k]=left[i];
            i++;
        }
        else
        {
            a[k]=right[j];
            j++;
        }
        k++;
    }
    while(i<l){
        a[k]=left[i];
            i++;
            k++;
    }
    while(j<r){
         a[k] = right[j];
            j++;
            k++;
    }
}
void mergeSort(int A[], int A_lenght){
    int n = A_lenght;
    if(n<2){
        return;
    }
    int mid = n/2;
    int left[mid];
    int right[n-mid];
    for(int i=0; i<mid-1; i++){
        left[i] = A[i];
    }
    for(int i=mid; i<n-1; i++){
        right[i-mid] = A[i];
    }
    mergeSort(left, mid);
    mergeSort(right, n-mid);
    merge(left,right,A,mid,n-mid);
}
int main()
{
    int Array[11]={1,9,5,6,7,4,3,8,99,81,56};
    cout<<"unsorted"<<endl;
    for(int i=0; i<11; i++){
       cout<<Array[i]<<" ";
    }
    cout<<endl;
    mergeSort(Array,11);
    cout<<"sorted"<<endl;
    for(int i=0; i<11; i++){
       cout<<Array[i]<<" ";
    }
    return 0;
}
**这是

编译后的结果截图**

你可以试试这个。

void mergeSort(int nElems)
{
double *workSpace = new double [nElems];
recMergeSort(workSpace, 0, nElems-1);
delete [] workSpace;
}
void recMergeSort(double workSpace[], int lowerBounds, int upperBound)
{
if (lowerBound == upperBound)
return; { else

int mid = (lowerBound + upperBound) / 2;
recMergeSort(workSpace, lowerBound, mid);
recMergeSort(workspace, mid+1, upperBound);
merge(workSpace, lowerBound, mid+1, upperBound);
}
}
void merge(double workSpace[],int lowPtr,int hightPtr,int upperBound){
int j = 0;
int lowerBound = lowPtr;
int mid = highPtr-1;
int n = upperBound-lowerBound+1;
while (lowPtr <= mid && highPtr <= upperBound)
if (theArray[lowPtr] < theArray[highPtr])
workSpace[j++] = theArray[lowPtr++];
else
workSpace[j++] = theArray[highPtr++];
while (lowPtr <= mid)
workSpace[j++] = theArray[lowPtr++];
while (highPtr <= upperBound)
workSpace[j++] = theArray[highPtr++];
for (j=0; j<n; j+++)
    theArray[lowerBound+j] = workSpace[j];

}