- 
                Notifications
    You must be signed in to change notification settings 
- Fork 0
๐จ๐ปโ๐ป 7์ 2์ผ ๊ณ ๊ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
        chaeun lee edited this page Jul 5, 2024 
        ·
        1 revision
      
    Java๋ฅผ ์ฌ์ฉํด์ Radix(๊ธฐ์), Quick, Merge(๋ณํฉ)์ ๋ ฌ์ ๊ณต๋ถํ๋ค.
import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.OutputStreamWriter;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
        writer.write("์ ๋ ฌํ  ์๋ค์ ์
๋ ฅํ์ธ์. >>> ");
        writer.flush();
        String[] input = reader.readLine().split(" ");
        int[] arr = new int[input.length];
        for (int i=0;i<input.length;i++)
            arr[i] = Integer.parseInt(input[i]);
        writer.write("์๋ ๋ฐฐ์ด: ");
        printfunc(writer,arr);
        radixSort(arr);
        writer.write("ํต ์ ๋ ฌ ํ ๋ฐฐ์ด: ");
        printfunc(writer,arr);
    }
    public static void radixSort(int[] arr){
        int max = Arrays.stream(arr).max().getAsInt();
        for(int exp = 1; max / exp > 0; exp *= 10){
            countingSortByDigit(arr,exp);
        }
    }
    public static void countingSortByDigit(int[] arr, int exp) {
        int n = arr.length;
        int[] output = new int[n];
        int[] count = new int[10];
        Arrays.fill(count, 0);
        for (int i = 0; i < n; i++) {
            int digit = (arr[i] / exp) % 10;
            count[digit]++;
        }
        for (int i = 1; i < 10; i++) {
            count[i] += count[i - 1];
        }
        for (int i = n - 1; i >= 0; i--) {
            int digit = (arr[i] / exp) % 10;
            output[count[digit] - 1] = arr[i];
            count[digit]--;
        }
        System.arraycopy(output, 0, arr, 0, n);
    }
    public static void printfunc(BufferedWriter writer, int[] arr) throws IOException{
        for (int j : arr) writer.write(j+" ");
        writer.write("\n\n");
        writer.flush();
    }
}import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.OutputStreamWriter;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
        writer.write("์ ๋ ฌํ  ์๋ค์ ์
๋ ฅํ์ธ์. >>> ");
        writer.flush();
        String[] input = reader.readLine().split(" ");
        int[] arr = new int[input.length];
        for (int i=0;i<input.length;i++)
            arr[i] = Integer.parseInt(input[i]);
        writer.write("์๋ ๋ฐฐ์ด: ");
        printfunc(writer,arr);
        quickSort(arr,0, arr.length-1);
        writer.write("ํต ์ ๋ ฌ ํ ๋ฐฐ์ด: ");
        printfunc(writer,arr);
    }
    public static void quickSort(int[] arr, int p, int q){
        if (p<q){
            int pi = partition(arr,p,q);
            quickSort(arr,p,pi-1);
            quickSort(arr,pi+1,q);
        }
    }
    public static int partition(int[] arr, int p, int q){
        int pivot = arr[q];
        int i = p-1;
        for (int j = p; j<q;j++){
            if (arr[j] < pivot) {
                i++;
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        int temp = arr[i+1];
        arr[i+1] = arr[q];
        arr[q] = temp;
        return i+1;
    }
    public static void printfunc(BufferedWriter writer, int[] arr) throws IOException{
        for (int j : arr) writer.write(j+" ");
        writer.write("\n\n");
        writer.flush();
    }
}import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.OutputStreamWriter;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
        writer.write("์ ๋ ฌํ  ์๋ค์ ์
๋ ฅํ์ธ์. >>> ");
        writer.flush();
        String[] input = reader.readLine().split(" ");
        int[] arr = new int[input.length];
        for (int i = 0; i < input.length; i++) {
            arr[i] = Integer.parseInt(input[i]);
        }
        writer.write("์๋ ๋ฐฐ์ด: ");
        printArray(writer, arr);
        mergeSort(arr, 0, arr.length - 1);
        writer.write("๋ณํฉ ์ ๋ ฌ ํ ๋ฐฐ์ด: ");
        printArray(writer, arr);
    }
    public static void mergeSort(int[] arr, int left, int right) {
        if (left < right) {
            int mid = (left + right) / 2;
            mergeSort(arr, left, mid);
            mergeSort(arr, mid + 1, right);
            merge(arr, left, mid, right);
        }
    }
    public static void merge(int[] arr, int left, int mid, int right) {
        int n1 = mid - left + 1;
        int n2 = right - mid;
        int[] L = new int[n1];
        int[] R = new int[n2];
        for (int i = 0; i < n1; i++) {
            L[i] = arr[left + i];
        }
        for (int j = 0; j < n2; j++) {
            R[j] = arr[mid + 1 + j];
        }
        int i = 0, j = 0;
        int k = left;
        while (i < n1 && j < n2) {
            if (L[i] <= R[j]) {
                arr[k] = L[i];
                i++;
            } else {
                arr[k] = R[j];
                j++;
            }
            k++;
        }
        while (i < n1) {
            arr[k] = L[i];
            i++;
            k++;
        }
        while (j < n2) {
            arr[k] = R[j];
            j++;
            k++;
        }
    }
    public static void printArray(BufferedWriter writer, int[] arr) throws IOException {
        for (int j : arr) {
            writer.write(j + " ");
        }
        writer.write("\n\n");
        writer.flush();
    }
}