█████████ ████ ███░░░░░███ ░░███ ███ ░░░ ██████ ███████ ██████ ██████ ░███ ███░░███ ███░░███ ███░░███ ███░░███ ░███ ░███ ░███░███ ░███ ░███████ ░███ ░███ ░░███ ███░███ ░███░███ ░███ ░███░░░ ░███ ░███ ░░█████████ ░░██████ ░░████████░░██████ ░░██████ ░░░░░░░░░ ░░░░░░ ░░░░░░░░ ░░░░░░ ░░░░░░

Envío 3357

Problema 0xde - Ordenar un arreglo grande

  • Autor: datruq
  • Fecha: 2021-03-12 05:28:45 UTC (Hace casi 4 años)
Caso # Resultado Tiempo Memoria
#1
Correcto
0.199 s 16 KBi
#2
Correcto
0.185 s 16 KBi
#3
Correcto
0.179 s 16 KBi
#4
Correcto
0.274 s 16 KBi
#5
Correcto
0.185 s 16 KBi
#6
Correcto
0.181 s 16 KBi
#7
Tiempo límite excedido
1.194 s 56 KBi
#8
Tiempo límite excedido
1.007 s 38 KBi
#9
Tiempo límite excedido
1.039 s 55 KBi
#10
Tiempo límite excedido
1.29 s 57 KBi
#11
Tiempo límite excedido
1.174 s 66 KBi
#12
Esperando resultado...
#13
Tiempo límite excedido
1.312 s 59 KBi
#14
Tiempo límite excedido
1.115 s 57 KBi
#15
Esperando resultado...
#16
Esperando resultado...
#17
Esperando resultado...
#18
Tiempo límite excedido
1.089 s 57 KBi
#19
Esperando resultado...
#20
Tiempo límite excedido
1.03 s 53 KBi
#21
Tiempo límite excedido
1.113 s 45 KBi
#22
Esperando resultado...
#23
Tiempo límite excedido
1.013 s 57 KBi
#24
Tiempo límite excedido
1.056 s 58 KBi
#25
Esperando resultado...
#26
Tiempo límite excedido
1.208 s 63 KBi
#27
Esperando resultado...
Puntos totales: 23 / 100

Código

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sn = new Scanner(System.in);
        int size = Integer.parseInt(sn.nextLine());
        String[] arItems = sn.nextLine().split(" ");
        long[] array = new long[size];
        for (int i = 0; i < size; i++) {
            int arItem = Integer.parseInt(arItems[i]);
            array[i] = arItem;
        }
        mergeSort(array, size);
        for (int i = 0; i < array.length; ++i) {
            System.out.print(array[i] + " ");
        }

    }

    private static void merge(long[] left_arr, long[] right_arr, long[] arr, int left_size, int right_size) {
        int i = 0, l = 0, r = 0;
        //The while loops check the conditions for merging
        while (l < left_size && r < right_size) {
            if (left_arr[l] < right_arr[r]) {
                arr[i++] = left_arr[l++];
            } else {
                arr[i++] = right_arr[r++];
            }
        }
        while (l < left_size) {
            arr[i++] = left_arr[l++];
        }
        while (r < right_size) {
            arr[i++] = right_arr[r++];
        }
    }

    public static void mergeSort(long[] arr, int len) {
        if (len < 2) {
            return;
        }

        int mid = len / 2;
        long[] left_arr = new long[mid];
        long[] right_arr = new long[len - mid];

        //Dividing array into two and copying into two separate arrays
        int k = 0;
        for (int i = 0; i < len; ++i) {
            if (i < mid) {
                left_arr[i] = arr[i];
            } else {
                right_arr[k] = arr[i];
                ++k;
            }
        }
        // Recursively calling the function to divide the subarrays further
        mergeSort(left_arr, mid);
        mergeSort(right_arr, len - mid);
        // Calling the merge method on each subdivision
        merge(left_arr, right_arr, arr, mid, len - mid);
    }

}