반복처리 속의 반복 처리 = 다중 반복문
외부 루프 카운터가 첫 번째 값으로 설정되어
그 상태로 내부 루프 카운터가 처음부터 마지막 값까지 변한다
즉 외부를 고정하여 내부가 변한다
public static void main(String[] args) {
for (int i = 2; i < 10; i++) {
System.out.println(i + "단");
for (int j = 1; j < 10; j++) {
System.out.print(i + "X" +j + " = " + i*j + " ");
System.out.println();
}
}
간단한 위에서 설명한 외부를 고정하고 내부가 처음부턱 마지막까지 변한다
예제)
다 변한 이후 외부가 변한다
삽입 정렬 :
배열을 정렬하는 알고리즘
class Arraysort{
public static void printArray(int[] a){
for (int i = 0; i < a.length; i++) {
System.out.print(" [" + a[i]+ "] ");
}
System.out.println();
}
}
public class Practice {
public static void main(String[] args) {
int[] a = {90,34,78,12,56};
System.out.println("정렬 전 배열");
Arraysort.printArray(a);
int ins,cmp,temp;
for (ins = 1; ins < a.length; ins++){
temp = a[ins];
for (cmp = ins - 1; cmp >= 0; cmp--){
if (a[cmp] > temp){
a[cmp + 1] = a[cmp];
}else {
break;
}
}
a[cmp + 1] = temp;
}
System.out.println("정렬 후");
Arraysort.printArray(a);
}
}
실행순서 :
int[] a = {90,34,78,12,56};
1. 외부 for문 초기식 ins = 1; 증감식 ins < a.length;[a.length = 5] ins++{
temp = a[ins] 이 때 a[ins]는 1이므로 a[1] = 34요소가 temp에 대입이 된다
}
temp = a[ins]; // 이 때 temp에는 34라는 값이 대입
두번째 동작 내부 for문
for (cmp = ins - 1; cmp >= 0; cmp--){
if (a[cmp] > temp){
a[cmp + 1] = a[cmp];
}else {
break;
}
}
현재 cmp = 0 [ins = 1이므로 ins - 1 == 0이 된다]
cmp == 0이 되므로
cmp >= 0 [0 >= 0 0은 0보다 크거나 같다라는 조건이 참이 되므로 내부 for문 실행]
int[] a = {90,34,78,12,56};
if (a[cmp] > temp){
if (a[cmp] > temp){
// 현재 cmp == 0 이므로 a[cmp] = a[0] == 즉 90이라는 인덱스 요소와
// temp == a[ins == 1] a[1] == 34라는 요소와 비교를 하게 된다
if (90 > 34)
라는 조건은 참이므로
a[cmp + 1] = a[cmp];
현재 cmp == 0
a[1] = a[0]
에는 a[0]번째 요소값을
a[1]에 삽입을 하겠다
현재 배열의 모습 :
int[] a = {90,90,78,12,56};
세 번째 다시 내부 for문 실행 :
for (cmp = ins - 1; cmp >= 0; cmp--){
증감식 cmp--
을 통해서 cmp == -1이 된다
-1 >= 0 이라는 조건은 거짓이 되므로
내부 for문 반복문 처리를 종료한다
a[cmp + 1] = temp;
현재 temp == 34
현재 cmp == - 1
- 1 + 1 == 0이 되므로
a[0] == 34라는 값이 대입된다.
두 번쨰 외부 for문 동작
현재 배열 모습
{34,90,78,12,56}
ins 값 증가
ins == 2
int[] a = {90,34,78,12,56};
temp = a[2] 요소 78을
temp에 대입
temp = a[ins];
내부 for문
현재 ins == 2
for (cmp = ins - 1; cmp >= 0; cmp--){
if (a[cmp] > temp){
a[cmp + 1] = a[cmp];
}else {
break;
}
}
cmp = 2 - 1 즉 1이라는 값을 대입
if a[cmp] > temp
90과 78이라는 if문 조건은 참이 되므로
if문 수행
현재 cmp == 1
a[cmp + 1] = a[cmp]
즉 a[1] 요소의 값을 a[2]요소에 대입한다
이 때
현재 배열 모습 {34,90,90,12,56}
다시 cmp 값을 감소
이 때 cmp == 0이된다
cmp{0} >= 0 은 조건이 참이므로 내부 반복문을 수행
for (cmp = ins - 1; cmp >= 0; cmp--){
if (a[cmp] > temp){
a[cmp + 1] = a[cmp];
}else {
break;
}
}
a[cmp]
= 34와 temp == 78
if 조건 34 > 78 조건이 거짓이므로
반복문을 종료한다
이 떄
a[cmp + 1] = temp
현재 cmp == 0
a[1]에 temp를 대입한다
이런식으로 삽입 정렬을 하면 된다