퀵 정렬 구현 코드
public static int[] quickSort(int[] arr, int left, int right ){
if(arr == null){
return null;
}
int[] result = arr;
if(left >= right){
return result;
}
int pivot = partition(result, left, right);
result = quickSort(result, left ,pivot- 1);
result = quickSort(result, pivot+1 ,right);
return result;
}
private static int partition(int[] arr, int left, int right){
if(arr == null || left < 0){
return -1;
}
int pivotVal = arr[right];
int endPos = left -1;
for(int i = left; i< right; i++){
if(pivotVal > arr[i]){
endPos +=1;
swapValue(arr, i, endPos);
}
}
endPos +=1;
swapValue(arr, right, endPos);
return endPos;
}
public static int[] swapValue(int[] arr, int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
return arr;
}
최대 공약수 최소공배수
//최대공약수
private int gcd(int a, int b) {
if (b == 0)
return a;
return gcd(b, a % b);
}
// 두 수의 곱을 최대 공약수로 나누면 최소 공배수
private int lcm(int a, int b) {
return a * b / gcd(a, b);
}
피보나치 (재귀)
private int fibo(int n) {
if (n < 2)
return n;
return fibo(n - 1) + fibo(n - 2);
}
피보나치(DP)
private int fibo(int n) {
int[] dp = new int[n + 1];
dp[0] = 0;
dp[1] = 1;
for (int i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
팩토리얼
int fact(int n) {
if(n==1)
return 1;
return n * fact(n-1);
}
스텍 2개로 구현하는 큐
삽입보다는 제거에 집중, inStack에 있는 정보를 OutStack으로 옮기면서 데이터 순서를 바꾼다.
public class Que {
public Stack<Integer> inStack = new Stack<>();
public Stack<Integer> outStack = new Stack<>();
public void setInStack(Integer num){
inStack.push(num);
}
public Integer outStack(){
if(outStack.empty()){
if(inStack.empty()){
return null;
}else {
return deQue();
}
}else {
if(inStack.empty()){
return outStack.pop();
}else {
return deQue();
}
}
}
private Integer deQue() {
while (!inStack.isEmpty()){
Integer temp = inStack.pop();
outStack.push(temp);
}
return outStack.pop();
}
}