Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [c] insertion sort

  1. #1

    [c] insertionsort

    salve, ho un problema con questo programma, che quando eseguito, non visualizza correttamente l'output.
    qualcuno può aiutarmi a capire dov'è l'errore?


    codice:
    #include <stdlib.h>
    #include <stdio.h>
    //#include <time.h>
    
    void insertion_sort(int *, int);
    
    int main(){
    
    	int i, n;
    	int nr = 10;
    	int *myArray = malloc(nr*sizeof(int));
    
    printf("\nQuanti elementi vuoi inserire nell'array?\n");
    scanf("%d",&n);
    myArray=(int *) malloc (n*sizeof(int));
    
    for(i=0;i<n;i++){
     printf("\nInserisci il %d elemento dell'array: \n",i+1);
     scanf("%d",&myArray[i]);
    }
    	for(i = 0; i < nr; i++)
    		printf("%d ", myArray[i]);
    	printf("\n\n");
    
    
    	insertion_sort(myArray, nr);
    
    	for(i = 0; i < nr; i++)
    		printf("%d ", myArray[i]);
    	
    	getch();
    }
    
    void insertion_sort(int *array, int nr){
    
    	int i, j, temp;
    
    	for(i = 1; i < nr; i++){
    		temp = (array[i]);
    		j = i - 1;
    		while((j >= 0) && (temp < array[j])){
    			(array[j+1]) = (array[j]);
    			j--;
    			}
    		(array[j+1]) = temp;
    		}		
    }
    grazie.
    @@@

  2. #2
    codice:
    #include <stdlib.h>
    #include <stdio.h>
    
    void insertion_sort(int *, int);
    
    int main()
    {
        int i, n, *myArray;
    
        printf("\nQuanti elementi vuoi inserire nell'array ?: ");
        scanf("%d", &n);
        
        myArray = (int *) malloc (n*sizeof(int));
    
        for(i = 0; i < n; i++)
        {
            printf("Inserisci il %d elemento dell'array: ", i+1);
            scanf("%d", &myArray[i]);
        }
    
        for(i = 0; i < n; i++)
            printf("%d ", myArray[i]);
    	
        printf("\n\n");
    
        insertion_sort(myArray, n);
    
        for(i = 0; i < n; i++)
    	printf("%d ", myArray[i]);
    	
        getch();
    
        free(myArray);
    
        return 0;	
    }
    
    
    void insertion_sort(int *array, int n)
    {
        int i, j, temp;
    
        for(i = 1; i < n; i++)
        {
            temp = (array[i]);
    	j = i - 1;
    
    	while((j >= 0) && (temp < array[j]))
            {
    	    (array[j+1]) = (array[j]);
    	    j--;
    	}
    
    	(array[j+1]) = temp;
        }		
    }
    *a cosa serve nr = 10?
    *perchè allochi la memoria 2 volte?
    *perchè fai iterare (con for) fino a 10 (nr) supponendo di avere un array composto da 3 elementi (n)?

    p.s. l'algoritmo di ordinamento non l'ho controllato
    ma così - il programma - dovrebbe fungere...

    ...Terrible warlords, good warlords, and an english song

  3. #3
    innanzitutto grazie 1000!

    allora.. l'ho provato.. mi dava errore nei punti che ho segnato in grassetto.. al posto del getch() ci ho messo il system["pause"] e ora funziona!

    codice:
    #include <stdlib.h>
    #include <stdio.h>
    
    void insertion_sort(int *, int);
    
    int main()
    {
        int i, n, *myArray;
    
        printf("\nQuanti elementi vuoi inserire nell'array ?: ");
        scanf("%d", &n);
        
        myArray = (int *) malloc (n*sizeof(int));
    
        for(i = 0; i < n; i++)
        {
            printf("Inserisci il %d elemento dell'array: ", i+1);
            scanf("%d", &myArray[i]);
        }
    
        for(i = 0; i < n; i++)
            printf("%d ", myArray[i]);
    	
        printf("\n\n");
    
        insertion_sort(myArray, n);
    
        for(i = 0; i < n; i++)
    	printf("%d ", myArray[i]);
    
    system ("pause")	;
    //    getch();
    
    //    free(myArray);
    
        return 0;	
    }
    
    
    void insertion_sort(int *array, int n)
    {
        int i, j, temp;
    
        for(i = 1; i < n; i++)
        {
            temp = (array[i]);
    	j = i - 1;
    
    	while((j >= 0) && (temp < array[j]))
            {
    	    (array[j+1]) = (array[j]);
    	    j--;
    	}
    
    	(array[j+1]) = temp;
        }		
    }

    dato che ho altri programmini da fare, posso tornare a disturbarti, se dovessi averne bisogno?
    @@@

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.