0
votes

Problème de copie d'une matrice à une autre et de ne pas modifier le tableau d'origine

J'ai un problème. J'ai besoin de trier un tableau de différentes manières. Le problème est qu'après que je trie la première fois que mon tableau d'origine reste trié. J'ai essayé de copier le tableau d'origine à un autre mais il reste trié. Mon code est le suivant:

void printArray(int ** array, int n){
    int i;
    for(i = 0; i < n; i++){
        printf(" %d ", (*array)[i]);
    }
}

int main(){
    int *array, n, number, i, j;

    printf("\nIntroduce the size of the array:");
    scanf("%d", &n);
    array = (int*)malloc(n * sizeof(int));
    for(i = 0; i < n; i++){
        number = rand() % 1000 + 1;
        array[i] = number;
    }

    printf("\nUnsorted array:");
    printArray(&array, n);

    //bubble sort
    int *array2, aux;
    array2 = array;
    for (i = 0; i < n-1; i++){
        for (j = 0; j < n-1; j++){
            if(array2[j] > array2[j+1]){
                aux = array2[j];
                array2[j] = array2[j+1];
                array2[j+1] = aux;
            }
        }
    }
    printf("\nSorted array:");
    printArray(&array2, n);         

    //The problem is in here, if I print the original array, it's already sorted
    printf("\nUnsorted original array:");
    printArray(&array, n);

}


2 commentaires

Array2 = Array; Ceci ne copie pas un tableau. Cela copie un pointeur. Un pointeur n'est pas un tableau.


Oui, j'ai les instructions qu'il faut faire avec des pointeurs et je ne sais vraiment pas quoi faire.


3 Réponses :


1
votes

Cela se produit parce que vous venez d'attribuer une autre variable de pointeur (tableau) à la même adresse en mémoire, vous devez donc trier la matrice initiale.

Ce que vous avez à faire est d'allouer la mémoire et de copier la matrice avant de le trier. Vous pouvez le faire très similaire à votre routine personnelle (): p> xxx pré>

puis dans votre principal () que vous faites: p>

array2 = (int*)malloc(n * sizeof(int));
copyArray(array, array2, n);


1 commentaires

Merci beaucoup! J'avais essayé la nouvelle allocation de la mémoire mais je n'ai pas fait la routine de Copyarray. Merci encore.



1
votes

au lieu de xxx

faire ce xxx


0 commentaires

0
votes

Voir, vous ne créez qu'un seul tableau. Initialement, vous avez utilisé une variable de pointeur "Array" pour pointer sur l'adresse de base de ce tableau. Ensuite, en faisant cela,

int *newArray=(int*)malloc(sizeof(int));    // dynamically allocating memory
for(i=0;i<n;i++){
newArray[i]=array[i];              // *(newArray+i)=*(array+i); alternative
}


0 commentaires