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);
}
3 Réponses :
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> puis dans votre principal () que vous faites: p> array2 = (int*)malloc(n * sizeof(int));
copyArray(array, array2, n);
Merci beaucoup! J'avais essayé la nouvelle allocation de la mémoire mais je n'ai pas fait la routine de Copyarray. Merci encore.
au lieu de faire ce p>
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
}
Array2 = Array; code> 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.