-
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();
}
}