簡體   English   中英

使用C ++中的mergesort實現的特殊行為,排序結果不應到位

[英]Peculiar behavior with mergesort implementation in C++, sorted result should not be in place

在下面歸並排序的執行,輸入指針inputIntArray以某種方式受到破壞保持和卷起指向由指向的排序值sortedArray 實際上,考慮到調用delete[] intArray; ,我認為inputIntArray不會指向任何東西delete[] intArray; 在最后一次合並之前。 有人能對此有所啟發嗎? 謝謝。

#include <iostream>
using namespace std;

int* getSubArray (int*,int,int);
int* merge(int*,int*,int,int);

int* mergeSort ( int* intArray , int n ) {
    if (n==1){
        return intArray;
    }
    else {
        int m = n/2;
        int* leftArray = mergeSort ( getSubArray (intArray,0,m-1) , m );
        int* rightArray = mergeSort ( getSubArray (intArray,m,n) , n-m );
        delete[] intArray;
        return merge(leftArray,rightArray,m,n);
    }
}

int* getSubArray ( int* intArray , int start , int end ){
    int n = end - start + 1;
    int * subIntArray = new int [ n ];
    for (int i=0;i<n;i++){
        subIntArray[i]=intArray[i+start];
    }
    return subIntArray;
}

int* merge(int* leftArray, int* rightArray, int m, int n){
    int* intArray = new int[n];
    int i=0 , j=0;
    for (int k=0;k<n;k++){
        if ( i == m && j == n ) {
            break;
        }
        if (leftArray[i]<=rightArray[j] && i < m){
            intArray[k]=leftArray[i++];
        }
        else {
            intArray[k]=rightArray[j++];
        }
    }
    delete[] leftArray;
    delete[] rightArray;
    return intArray;
}

int main () {

    int* inputIntArray = new int[6]{1,5,6,2,3,7};
    for (int i=0;i<6;i++){
        cout << inputIntArray[i];
    }
    cout << endl;

    int* sortedArray = mergeSort ( inputIntArray , 6 );
    for (int i=0;i<6;i++){
        cout << inputIntArray[i];
    }
    cout << endl;
    for (int i=0;i<6;i++){
        cout << sortedArray[i];
    }
    cout << endl;
    delete[] sortedArray;
}

這是輸出:

156237
123567
123567

您有這個電話:

int* sortedArray = mergeSort(inputIntArray, 6);

在執行該代碼的過程中,您需要執行以下操作:

delete[] inputIntArray;
sortedArray = new int[6];

這當然是可能的, sortedArray得到了相同的地址作為剛剛刪除inputIntArray

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM