@@ -0,0 +1,2387 @@
+class Timsort %7B %0A  %0A    static int RUN = 32; %0A    public static void insertionSort(int%5B%5D arr, int left, int right) %7B %0A        for (int i = left + 1; i %3C= right; i++) %7B %0A            int temp = arr%5Bi%5D; %0A            int j = i - 1; %0A            while (arr%5Bj%5D %3E temp && j %3E= left) %7B %0A                arr%5Bj + 1%5D = arr%5Bj%5D; %0A                j--; %0A            %7D %0A            arr%5Bj + 1%5D = temp; %0A        %7D %0A    %7D %0A  %0A    public static void merge(int%5B%5D arr, int l,  %0A                                int m, int r) %7B %0A        int len1 = m - l + 1, len2 = r - m; %0A        int%5B%5D left = new int%5Blen1%5D; %0A        int%5B%5D right = new int%5Blen2%5D; %0A        for (int x = 0; x %3C len1; x++) %7B %0A            left%5Bx%5D = arr%5Bl + x%5D; %0A        %7D %0A        for (int x = 0; x %3C len2; x++) %7B %0A            right%5Bx%5D = arr%5Bm + 1 + x%5D; %0A        %7D %0A  %0A        int i = 0; %0A        int j = 0; %0A        int k = l; %0A  %0A        while (i %3C len1 && j %3C len2) %7B %0A            if (left%5Bi%5D %3C= right%5Bj%5D) %7B %0A                arr%5Bk%5D = left%5Bi%5D; %0A                i++; %0A            %7D %0A            else %7B %0A                arr%5Bk%5D = right%5Bj%5D; %0A                j++; %0A            %7D %0A            k++; %0A        %7D %0A  %0A        while (i %3C len1) %7B %0A            arr%5Bk%5D = left%5Bi%5D; %0A            k++; %0A            i++; %0A        %7D %0A  %0A        while (j %3C len2) %7B %0A            arr%5Bk%5D = right%5Bj%5D; %0A            k++; %0A            j++; %0A        %7D %0A    %7D %0A  %0A    public static void timSort(int%5B%5D arr, int n) %7B %0A          %0A        for (int i = 0; i %3C n; i += RUN) %7B %0A            insertionSort(arr, i, Math.min((i + 31), (n - 1))); %0A        %7D %0A        for (int size = RUN; size %3C n; size = 2 * size)  %7B %0A            for (int left = 0; left %3C n; left += 2 * size) %7B%0A                int mid = left + size - 1; %0A                int right = Math.min((left + 2 * size - 1), (n - 1)); %0A                merge(arr, left, mid, right); %0A            %7D %0A        %7D %0A    %7D %0A  %0A    public static void printArray(int%5B%5D arr, int n) %7B %0A        for (int i = 0; i %3C n; i++) %7B %0A            System.out.print(arr%5Bi%5D + %22 %22); %0A        %7D %0A        System.out.print(%22%5Cn%22); %0A    %7D %0A  %0A    public static void main(String%5B%5D args) %7B %0A        int%5B%5D arr = %7B5, 21, 7, 23, 19%7D; %0A        int n = arr.length; %0A        System.out.print(%22Given Array is%5Cn%22); %0A        printArray(arr, n); %0A  %0A        timSort(arr, n); %0A  %0A        System.out.print(%22After Sorting Array is%5Cn%22); %0A        printArray(arr, n); %0A    %7D %0A%7D 

Add Java Timsort