[μλ£κ΅¬μ‘°μ μκ³ λ¦¬μ¦] μ λ ¬ μκ³ λ¦¬μ¦, νμ μκ³ λ¦¬μ¦ (2023.04.04)
π μ λ ¬ μκ³ λ¦¬μ¦
μμλ€μ μΌμ ν μμλλ‘ μ΄κ±°νλ μκ³ λ¦¬μ¦
π μ½μ μ λ ¬
νΉμ ν λ°μ΄ν°λ₯Ό μ μ ν μμΉμ μ½μ νλ μ λ ¬
λ°μ΄ν°κ° κ±°μ μ λ ¬ λμ΄ μμ λ ν¨μ¨μ
π λ³ν©μ λ ¬
μ£Όμ΄μ§ μλ£λ₯Ό μκ² μͺΌκ° λ€ ν©μΉλ κ³Όμ μμ μ λ ¬
π ν΅μ λ ¬
κΈ°μ€ ν€(pivot)λ₯Ό κΈ°μ€μΌλ‘ μκ±°λ κ°μκ°μ μ§λ λ°μ΄ν°λ μμΌλ‘, ν° κ°μ μ§λ λ°μ΄ν°λ λ€λ‘ κ°λλ‘ νμ¬ λ°μ΄ν°λ₯Ό λΆλ¦¬ν΄κ°λ©° μ λ ¬
μΌμͺ½μμ μμν ν€λ κΈ°μ€ν€λ³΄λ€ ν¬λ©΄, μ€λ₯Έμͺ½μμ μμν ν€λ κΈ°μ€ν€λ³΄λ€ μμΌλ©΄ λ©μΆ€
λ κ°μ μ리λ₯Ό λ°κΏ
λ κ°μ 컀μκ° λ§λλ©΄ μΌμͺ½μΌλ‘λ κΈ°μ€ν€λ³΄λ€ μμ κ°λ§, μ€λ₯Έμͺ½μλ κΈ°μ€ν€λ³΄λ€ ν° κ°λ§ λ¨μ
π λ²λΈμ λ ¬
λ μΈμ ν μμλ₯Ό λΉκ΅νμ¬ μ λ ¬νλ λ°©λ²
ν ν΄λ§ λλλ κ°μ₯ ν° μ«μκ° μ μΌ λ€μ μμ
μμμ μΈλ±μ€ 0, 1λΆν° > 1, 2 > 2, 3 > ... > n-1, nκΉμ§ νμΈ ---- 1νμ°¨
0,1 > 1,2 > 2,3 > ... >n-2, n-1 ----- 2νμ°¨
...
μ΅λ n-1νμ°¨κΉμ§ μ§ν
μ₯μ
- μΈμ ν κ°λ§ κ³μν΄μ λΉκ΅νλ λ°©μμΌλ‘ ꡬνμ΄ μ½λ€. >> μΉνμ΄ λ§μ΄ μ΄λ£¨μ΄μ§λ€.
- μ½λκ° μ§κ΄μ μ΄λ€.
- μ€κ°μ λ©μΆ μ μμ
λ¨μ
- νλμ μμκ° κ°μ₯ μΌμͺ½μμ κ°μ₯ μ€λ₯Έμͺ½μΌλ‘ μ΄λνλ €λ©΄ λ°°μ΄μ λͺ¨λ μμμ κ΅ν λμ΄μΌ ν¨
- νΉμ μμκ° μ΅μ’ μ λ ¬ κ²°κ³Όμ λ§λ μμΉμ μλλΌλ κ΅νλλ μΌμ΄ μΌμ΄λ μ μμ
μ¦, ꡬνμ΄ λ¨μνμ§λ§ λ리λ€.
package μκ³ λ¦¬μ¦;
import java.util.Arrays;
public class Ex01λ²λΈμ λ ¬_λ΄λ¦Όμ°¨μ {
public static void main(String[] args) {
//λ€μ λ°°μ΄μ λ²λΈ μ λ ¬ μκ³ λ¦¬μ¦μ μ΄μ©νμ¬ λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬ν ν κ²°κ³Όμ κ΅ν νμ μΆλ ₯
int[] arr = {6,8,2,1,4,3};
int cnt = 0;
boolean sw = true;
for(int k = 0 ; k < arr.length - 1 ; k++) {
sw = true;
for(int i = 0 ; i < arr.length - k - 1 ; i++) {
if(arr[i] < arr[i+1]) {
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
sw = false;
}
}
if(sw) {
break;
}
System.out.println(k+1 + "νμ°¨ : " + Arrays.toString(arr));
}
}
}
π μ ν μ λ ¬
κ°μ₯ ν° μμ λλ μμ μμλ₯Ό μ°Ύμ μ£Όμ΄μ§ μμΉλ₯Ό κ΅μ²΄ν΄ λκ°λ μμ
κ°μ₯ μμ μκ° μλ μΈλ±μ€λ₯Ό κΈ°μ΅νλ λ³μ νμ
0λ² μΈλ±μ€μ 1~n-1λ² μΈλ±μ€κΉμ§ νλνλ λΉκ΅ν΄κ°λ©° κ°μ₯ μμ μ«μμ μΈλ±μ€λ₯Ό κΈ°μ΅ν΄λμλ€κ°, μμΉ κ΅ν
1λ² μΈλ±μ€μ 2~n-1λ² μΈλ±μ€κΉμ§ νλνλ λΉκ΅ν΄κ°λ©΄ κ°μ₯ μμ μ«μμ μΈλ±μ€λ₯Ό κΈ°μ΅ν΄λμλ€κ°, μμΉ κ΅ν
μ΅λ n-1νμ°¨κΉμ§ μ§ν
νμ°¨μ λ§μ§λ§μλ§ μΉν. λ°κΎΈλκ² μ λ€. -> μ΄λ₯Ό μν΄ μΈλ±μ€ λ²νΈλ₯Ό κΈ°μ΅νλ€.
μ€κ°μ λ©μΆ μ μμ. λκΉμ§ λ΄μΌνλ€.
μ₯μ
- μ λ ¬μ μν λΉκ΅ νμλ λ§μΌλ κ΅ν νμκ° μ κΈ°μ κ΅νμ΄ λ§μ΄ μ΄λ£¨μ΄μ ΈμΌ νλ μνμμ ν¨μ¨μ
λ¨μ
- μ΄λ―Έ μ λ ¬λ μνμμ μμμ μλ£κ° μΆκ°λλ©΄ μ¬μ λ ¬ν λ μ²λ¦¬ μλκ° λλ¦Ό
package μκ³ λ¦¬μ¦;
import java.util.Arrays;
public class Ex03μ νμ λ ¬μκ³ λ¦¬μ¦_λ΄λ¦Όμ°¨μ {
public static void main(String[] args) {
int[] arr = {6,8,2,1,4,3};
int index;
for(int i = 0 ; i < arr.length - 1 ; i++) {
index = i; //indexλ κ°μ₯ ν° μμ μΈλ±μ€ λ²νΈλ₯Ό μ μ₯νλ λ³μ
for(int j = index + 1 ; j < arr.length ; j++) {
if(arr[j] > arr[index]) {
index = j;
}
}
int temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
System.out.println(i+1 + "νμ°¨ : " + Arrays.toString(arr));
}
}
}
π κ²μ μκ³ λ¦¬μ¦
νΉμ μμλ₯Ό κ²μνλ μκ³ λ¦¬μ¦
π μμ°¨κ²μ
κ°μ₯ λ¨μν κ²μ λ°©λ²μΌλ‘ μμμ μ λ ¬μ΄ νμμλ€.
νμ§λ§ 리μ€νΈ κΈΈμ΄κ° κΈΈλ©΄ λΉν¨μ¨μ
μ²μλΆν° λκΉμ§ μμ°¨μ μΌλ‘ λΉκ΅
package μκ³ λ¦¬μ¦;
public class Ex05μμ°¨κ²μμκ³ λ¦¬μ¦ {
public static void main(String[] args) {
int num = 78;
int[] arr = {13,35,15,11,26,72,78,13,61,90};
for(int i = 0 ; i < arr.length - 1 ; i++) {
if(num == arr[i]) {
System.out.println(i);
break;
}
}
}
}
π μ΄μ§κ²μ
리μ€νΈμ μ€κ° κ°μ μ ν΄ ν¬κ³ μμμ λΉκ΅ν΄ κ²μνλ μκ³ λ¦¬μ¦
μ λ ¬λ 리μ€νΈμμλ§ μ¬μ©ν μ μμ
첫λ²μ§Έ μΈλ±μ€μ λ§μ§λ§ μΈλ±μ€ μ¬μ΄ μ€κ° λ²νΈ μΈλ±μ€μ μ°Ύκ³ μ νλ μμ λΉκ΅
μ°Ύκ³ μ νλ μκ° μ€κ° λ²νΈ μΈλ±μ€μ κ°λ³΄λ€ ν¬λ©΄ μ€κ°κ° μ΄νμ κ°λ§ νμΈ
첫 μΈλ±μ€μ λ§μ§λ§ μΈλ±μ€ μ¬μ΄ μ€κ° μΈλ±μ€μ κ°κ³Ό μ°Ύκ³ μ νλ μμ λΉκ΅
μ°Ύκ³ μ νλ μλ³΄λ€ μ€κ°κ°λ³΄λ€ ν¬λ©΄ μ€κ°κ° μ΄νμ κ° νμΈ
μμ μν©μ λ°λ³΅. μ€κ°λ²νΈ μΈλ±μ€μ κ°μ΄ μ°Ύκ³ μ νλ μμ κ°μ λκΉμ§.
package μκ³ λ¦¬μ¦;
public class Ex06μ΄μ§κ²μμκ³ λ¦¬μ¦ {
public static void main(String[] args) {
//μ΄μ§κ²μμκ³ λ¦¬μ¦
//λ³μ 3κ°λ₯Ό μ¬μ©ν΄μ λ°μ΄ν°λ₯Ό κ²μ
//lowIndex, highIndex, middleIndex
//μ₯μ : μκ°λ³΅μ‘λκ° 1/2λ‘ λΉ λ₯Έ νμ μλλ₯Ό κ°μ§κ³ μμ!
//λ¨μ : κ²μ μκ³ λ¦¬μ¦ μ μ λ ¬λ 리μ€νΈμμλ§ μ¬μ©ν μ μμ!
int[] arr = {1,7,16,25,30,33,41,66,78,90};
//lowIndex : μ΅μ index κ°
int lowIndex = 0;
//highIndex : μ΅λ index κ°
int highIndex = arr.length - 1;
int num = 78; //μ°Ύκ³ μ νλ μ
while(true) {
//middleIndex μ΄κΈ°ν
int middleIndex = (lowIndex + highIndex) / 2 ;
if(arr[middleIndex] == num) { //7
System.out.println("μΈλ±μ€ λ²νΈ : " + middleIndex);
break;
}else {
if(arr[middleIndex] > num) {
highIndex = middleIndex - 1;
}else {
lowIndex = middleIndex + 1;
}
}
}
}
}