Curso Avanzado de Algoritmos para Entrevistas con Empresas Tech como BAT

Implementa un algoritmo de ordenamiento por burbuja para un arreglo de enteros.

Dado un arreglo de enteros A y su tamaño n, devuelve el arreglo ordenado.

Ejemplo de prueba:

[1,2,3,5,2,3],6

Rseultado esperado:

[1,2,2,3,3,5]

El método de burbuja compara elementos adyacentes y mueve los mayores hacia la posición final.

Implemnetación:

class BubbleSort {
public:
    int* bubbleSort(int* A, int n) {
        // código de implementación
        for(int i=0; i<n; i++){
            for(int j=i+1; j<n; j++){
                if(A[i]>A[j]){
                    swap(A[i],A[j]);
                }
            } 
        }
        return A;
    }
};

Otra variante:

class BubbleSort {
public:
    int* bubbleSort(int* A, int n) {
        // código de implementación
        for(int i=0; i<n; i++){
            for(int j=n-1; j>i; j--){
                if(A[j]<A[j-1]){
                    int tmp = A[j];
                    A[j]=A[j-1];
                    A[j-1]=tmp;
                }
            }
        }
        return A;
    }
};

Versión alternativa del algoritmo de selección:

class SelectionSort {
public:
    int* selectionSort(int* A, int n) {
        // código de implementación
        for(int i=0; i<n-1; i++){
            int minIndex=i;
            for(int j=i+1; j<n; j++){
                if(A[j]<A[minIndex]){
                    minIndex=j;
                }
            }
            if(minIndex!=i){
                int temp=A[i];
                A[i]=A[minIndex];
                A[minIndex]=temp;
            }         
        }
        return A;
    }
};

Implementación de ordenamiento por inserción:

class InsertionSort {
public:
    int* insertionSort(int* A, int n) {
        // código de implementación
        for(int i=1; i<n; i++){
            for(int j=i-1; j>=0; j--){  
                if(A[j+1]<A[j]){
                    swap(A[j+1],A[j]);
                }
            }
        }
        return A;
    }
};

Allgoritmo de ordenamiento merge sort basado en recursión:

class MergeSort {
public:
    int* mergeSort(int* A, int n) {
        // código de implementación
        if( n==1){
            return A;
        }
        __mergeSort(A,0,n-1);
        return A;
    }
    //[l,r]
    void __mergeSort(int* A,int l,int r){
        if(l>=r){
            return;
        }
        int mid = (l+r)/2;
        __mergeSort(A,l,mid);
        __mergeSort(A,mid+1,r);
        __merge(A,l,mid,r);
    }
    // combina [l ,mid] y [mid,r]
    void __merge(int* A, int l,int mid,int r){
        int aux[r-l+1];  
        for (int i=l; i<=r; i++){
            aux[i-l] = A[i];
        }
        
        int i=l; int j = mid + 1;
        for(int k =l; k<=r; k++ ){
            if(i>mid){
                A[k]=aux[j-l];  
                j++;
            }else if(j>r){
                A[k] = aux[i-l];
                i++;
            }
            else if(aux[i-l]<aux[j-l]){
                A[k]= aux[i-l];
                i++;
            }else{
                A[k]= aux[j-l];
                j++;
            }
        }
    }
};

Ordenamiento rápido (Quick Sort):

// particiona el subarreglo arr[l...r]
// devuelve índice p tal que arr[l...p-1] < arr[p] y arr[p+1...r] > arr[p]
template <typename T>
int __partition(T arr[], int l, int r){

    T v = arr[l];

    int j = l; 
    for( int i = l + 1 ; i <= r ; i ++ )
        if( arr[i] < v ){
            j ++;
            swap( arr[j] , arr[i] );
        }

    swap( arr[l] , arr[j]);

    return j;
}

// ordena el subarreglo arr[l...r]
template <typename T>
void __quickSort(T arr[], int l, int r){

    if( l >= r )
        return;

    int p = __partition(arr, l, r);
    __quickSort(arr, l, p-1 );
    __quickSort(arr, p+1, r);
}

template <typename T>
void quickSort(T arr[], int n){

    __quickSort(arr, 0, n-1);
}

Etiquetas: algoritmos ordenamiento burbuja selección insercion

Publicado el 9-13 14:51