Cod sursa(job #2548452)

Utilizator HerkvlesAlexandru Presecan Herkvles Data 16 februarie 2020 18:06:57
Problema Sortare prin comparare Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 2.96 kb
package com.company;

import java.io.*;
import java.util.Scanner;

public class Main {

    public static void swap(int a, int b) {

        int aux = a;
        a = b;
        b = aux;

    }

    public static int partition(int array[], int left, int right) {

        int pivot = array[right], l = left;

        for(int i = left; i < right; i++)
            if(array[i] < pivot) {
                System.out.println(i + " " + l);
                int aux = array[i];
                array[i] = array[l];
                array[l] = aux;
                l++;
            }

        int aux = array[right];
        array[right] = array[l];
        array[l] = aux;

        return l;
    }

    public static void quickSort(int array[], int left, int right) {

        if(left >= right)
            return;

        int mid = partition(array, left, right);
        quickSort(array, left, mid - 1);
        quickSort(array, mid + 1, right);

    }

    public static void merge(int array[], int left, int mid, int right) {

        int a1[] = new int[100], a2[] = new int[100];

        for(int i = 0; i < mid - left + 1; i++)
            a1[i] = array[left + i];
        for(int i = 0; i < right - mid; i++)
            a2[i] = array[mid + i + 1];

        int i = 0, j = 0, k = 0;

        while(i < (mid - left + 1) && j < (right - mid)) {
            if(a1[i] < a2[j]) {
                array[k] = a1[i];
                i++;
            }
            else {
                array[k] = a2[j];
                j++;
            }
            k++;
        }

        while(i < (mid - left + 1)) {
            array[k] = a1[i];
            i++;
            k++;
        }

        while(j < (right - mid)) {
            array[k] = a2[j];
            j++;
            k++;
        }

        /*for(i = 0; i < array.length; i++)
            System.out.print(array[i] + " ");
        System.out.println();*/
    }

    public static void mergeSort(int array[], int left, int right) {

        if(left >= right)
            return;

        mergeSort(array, left, (left + right) / 2);
        mergeSort(array, (left + right) / 2 + 1, right);
        merge(array, left, (left + right) / 2, right);
    }

    public static void main(String[] args) throws IOException {

        int array[] = new int[500000];
        int n;

        FileInputStream fileIn = new FileInputStream("algsort.in");
        FileOutputStream fileOut = new FileOutputStream("algsort.out");

        Scanner scanner = new Scanner(fileIn);
        PrintWriter printer = new PrintWriter(fileOut);

        n = scanner.nextInt();

        for(int i = 0; i < n; i++)
            array[i] = scanner.nextInt();

        quickSort(array, 0, n - 1);

        for(int i = 0; i < n; i++)
            printer.print(array[i] + " ");

        printer.close();

        //for(int i = 0; i < n; i++)
            //System.out.print(array[i] + " ");
    }
}