Creare Videogiochi - Game Developer
[C] Algoritmi di Ordinamento - Versione stampabile

+- Creare Videogiochi - Game Developer (https://www.making-videogames.net/giochi)
+-- Forum: Programmazione (https://www.making-videogames.net/giochi/Forum-Programmazione)
+--- Forum: Programmazione in C C++ e C# (https://www.making-videogames.net/giochi/Forum-Programmazione-in-C-C-e-C)
+--- Discussione: [C] Algoritmi di Ordinamento (/thread-C-Algoritmi-di-Ordinamento)



[C] Algoritmi di Ordinamento - ManHunter - 19-07-2011

Salve a tutti,

studiando per un esame, ho dovuto imparare alcuni algoritmi per l'ordinamento di strutture dati. Ho deciso, quindi, di condividere questi algoritmi in modo che possiate usarli e studiarli anche voi.

Download
http://www.multiupload.com/G0DWSW2448

Di seguito, il listato del codice che potete trovare all'interno dei file.

- Bubble Sort
Codice:
/*Bubble Sort*/
void bubbleSort( tInfo a[], int n ){
    int i, k;
    bool modified = true;

    for( k = 0; k < n - 1 && modified; k++ ){
        modified = false;
        for( i = 0; i < n - k - 1; i++ )
            if( greater( a[i], a[i + 1] ) ){
                swap( &a[i], &a[i + 1] );
                modified = true;
            }
    }
}
/*______________________________*/
Tale ordinamento ha una complessità computazionale nel caso generico di T(n^2).


- Selection Sort
Codice:
/*Selection Sort*/
int searchMin( tInfo a[], int n ){
    int i, min = 0;

    for( i = 0; i < n; i++ )
        if( !greater( a[i], a[min] ) )
            min = i;
    return min;
}

void selectionSort( tInfo a[], int n ){
    int i, min;

    for( i = 0; i < n - 1; i++ ){
        min = i + searchMin( a + i, n - i );
        if( min != i )
            swap( &a[i], &a[min] );
    }
}
/*_______________________________*/
Tale ordinamento ha una complessità computazionale nel caso generico di T(n^2).


- Merge Sort
Codice:
/*Merge Sort*/
void merge( tInfo a1[], int n1, tInfo a2[], int n2, tInfo dest[] ){
    int pos1 = 0, pos2 = 0, k = 0;

    while( pos1 < n1 && pos2 < n2 ){
        if( greater( a1[pos1], a2[pos2] ) )
            dest[k++] = a1[pos1++];
        if( greater( a2[pos2], a1[pos1] ) )
            dest[k++] = a2[pos2++];
    }
    while( pos1 < n1 )
        dest[k++] = a1[pos1++];
    while( pos2 < n2 )
        dest[k++] = a2[pos2++];
}

void mergeSort( tInfo a[], int n, tInfo tmp[] ){
    int i, m = n/2;

    if( n < 2 )
        return;
    mergeSort( a, m, tmp );
    mergeSort( a + m, n - m, tmp );
    merge( a, m, a + m, n - m, tmp );
    for( i = 0; i < n; i++ )
        a[i] = tmp[i];
}
/*_____________________________________*/
Tale ordinamento ha una complessità computazionale nel caso generico di T(n * log n).


- Quick Sort
Codice:
/*Quick Sort */
int partition( tInfo a[], int n ){
    int i, k = 1;
    for( i = 1; i < n; i++ )
        if( !greater( a[i], a[0] ) )
            swap( &a[k++], &a[i] );
    swap( &a[0], &a[k-1] );
    return k - 1;
}

void quickSort( tInfo a[], int n ){
    int k;

    if( n < 2 )
        return;
    k = partition( a, n );
    quickSort( a, k );
    quickSort( a + k + 1, n - k - 1 );
}
/*___________________________________*/
Tale ordinamento ha una complessità computazionale nel caso generico di T(n * log n).



Bye!