조건문과반복문 -...

34
조건문과 반복문 C-언어의 활용을 위한 주요 기법 (1) Dong Kyue Kim Hanyang University [email protected]

Upload: others

Post on 13-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

조건문과 반복문

C-언어의 활용을 위한 주요 기법 (1)

Dong Kyue Kim

Hanyang University

[email protected]

Page 2: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

제어문

• 제어문

– 프로그램은 순차적으로 각 문장을 실행시키는 단순한 구조

– 복잡한 문제를 해결하기 위해서 제어문을 사용

– 제어문에는 조건에 따라 문장을 실행하게 하는 조건문과 특정 문장을 계속해서 반복시키는 반복문이 있다.

– 제어문의 사용은 프로그래밍에 있어서 가장 기본이 되는 중요한 부분

2

제어문

조건문

반복문

if(연봉 > 2500)취업;

else고시준비;

while(토플성적 < 80)영어공부;

Page 3: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

조건문

Page 4: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

조건문

• 조건문

– 문제를 해결할 때 어떤 조건에 따라서

두 개 또는 여러 개의 실행경로 가운데

하나를 선택하는 경우 사용

– 조건문을 사용함으로써 code 문장의

조건적인 실행이 가능해 짐.

• 조건문의 종류

4

문장 행동

if, else, else if 조건에 따라 실행을 할 것인지 안 할 것인지 정함.

continue, break 루프의 생략과 탈출

switch, case 선택적으로 실행.

날씨가좋은가?

테니스를 친다

YES

NO

Page 5: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

if 문

• if 문

– if 라는 단어는 “만약에 어떠한 조건이 만족된다면”이라는 뜻을 지닌다.

– 주어진 조건이 만족하면 그에 해당하는 일을 하는 문장이다.

5

if (실행 조건){

실행하고자 하는 내용;}

조건이 만족하지 않을 경우 건너 뛴다.

조건이 만족 할 경우실행한다.

Page 6: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

else 문

• else 문

– else문은 독립적으로 사용하는 것이 아니라 if문장과 더불어 하나의 문장을 구성하여 사용된다.

6

if (실행 조건){

실행하고자 하는 내용1;}else{

실행하고자 하는 내용2;}

조건이 만족하지 않을 경우 else 부분의 내용을 실행한다.

조건이 만족 할 경우 if 부분의 내용을 실행한다.

Page 7: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

if else 예제

7

#include <stdio.h>

int main (void){

int n;scanf (“%d”, &n);if( n == 1 ){

printf(“1을 입력하였습니다.\n”);}else{

printf(“1이 아닌 숫자를 입력하였습니다.\n”);}return 0;

}

Page 8: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

else if 문

• else if 문

– if 문과 같이 쓰이며 if 문장 후 else if는 몇 개이이든 올 수 있다.

– 맞는 조건을 찾으면 그 후의 조건은 건너 뛴다는 장점이 있다.

– if, else if, else 문장은 if, else 문장의 중첩된 형태로 표현 가능하다.

8

if (조건1){

실행하고자 하는 내용1;}else if (조건2){

실행하고자 하는 내용2;}else if (조건3){

실행하고자 하는 내용3;}else{

실행하고자 하는 내용4;}

조건 1이 만족하면 내용1 실행하고그 밑의 else 끝까지의 내용은 무시한다.

조건 1이 만족하지 않으면 조건 2 확인.조건 2 만족하면 내용2 실행하고

그 밑의 else 끝까지의 내용은 무시한다.

조건 1, 조건2이 만족하지 않으면 조건 3 확인.조건 3 만족하면 내용3 실행하고

그 밑의 else 끝까지의 내용은 무시한다.

조건 1, 조건2, 조건3이 만족하지 않으면내용 4 실행한다.

조건1, 조건2, 조건3 동시에 만족 시킨다고해도 내용1만 실행된다.

Page 9: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

else if 문

• if, else if, else 문장과 if, else 문장 비교

– else if 문장은 if, else문장으로 바꿀 수 있다.

9

if (조건1){

실행하고자 하는 내용1;}else if (조건2){

실행하고자 하는 내용2;}else if (조건3){

실행하고자 하는 내용3;}else{

실행하고자 하는 내용4;}

if (조건1){

실행하고자 하는 내용1;}else {

if (조건2){

실행하고자 하는 내용2;}else{

if (조건3){

실행하고자 하는 내용3;}else{

실행하고자 하는 내용4;}

}}

Page 10: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

switch 문

• switch 문

– 분기의 수가 많아지면 if else보다 switch문을 사용하는 것이 좋다.

– 하나의 인자를 받아서 실행할 영역을 결정짓는다.

– 실행할 영역은 case문으로 구분하고 영역 값은 반드시 정수이어야 한다.

– 마지막의 default문은 else문과 유사하다.

– 특성상 해당되는 영역을 실행한 다음 빠져 나오기 위해 break문을 사용해야 한다

10

switch (영역 구분 인자){

case 영역 값 :실행영역;break;

……default :

실행영역;}

Page 11: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

switch 문

• switch 문의 구문

11

switch ( n ){

case 1 :실행영역1;break;

case 2 :실행영역2;break;

case 5 :실행영역3;break;

default :실행영역4;

}

case 1은 첫번째 경우라는 것이 아니라 n이 1인경우라는 뜻이다.

n 값이 1이면 실행영역1, 2이면실행영역2, 5이면 실행영역3이실행되고 그외의 값이면 실행영역4가 실행된다.

default가 없을 경우 n값이그외의 값일 경우 아무것도실행하지 않는다.

정수형 이어야 한다.

Page 12: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

화면 출력 결과:n = 2 이다.

switch

• switch 문에서의 break 사용

– break: 반복 문이나 조건 문을 빠져나갈 때 사용한다.

12

n=2;switch (n){

case 1 :printf(“n = 1 이다. \n”);break;

case 2 :printf(“n = 2 이다. \n”);break;

case 5 :printf(“n = 5 이다. \n”);break;

default :printf(“n은 1,2,5가 아니다. \n”);

}

[단계1] n과 영역 값 1 비교

[단계2] n과 영역 값 2 비교

[단계3] n이 2이므로 실행

[단계4] break문의 의한 탈출

Page 13: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

switch

• break문이 없는 경우

– break문이 없는 경우 조건이 맞는 영역을 실행 한 후에 그 다음 영역의 조건이 맞는지 확인하지 않고 나머지 실행 내용을 전부 실행 한다.

13

n=2switch (n){

case 1 :printf(“n = 1 이다. \n”);

case 2 :printf(“n = 2 이다. \n”);

case 5 :printf(“n = 5 이다. \n”);

default :printf(“n은 1,2,5가 아니다. \n”);

}

[단계1] n과 영역 값 1 비교

[단계2] n과 영역 값 2 비교

[단계3] n이 2이므로 실행

[단계4] 실행영역3 실행

[단계5] 실행영역4 실행

[단계6] 전부 실행 하였으므로 끝

일단 한번 조건이맞으면 그 이후에는 영역 값과 비교를 하지 않는다.

화면 출력 결과:n = 2 이다.n = 5 이다.n은 1,2,5가 아니다

Page 14: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

반복문

Page 15: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

반복문

• 반복문

– 특정한 영역을 특정한 조건이 만족하는 동안 반복 실행 하기 위한 문장

– 프로그래밍 중 동일한 처리과정을 여러 번 반복하여야 할 때 반복 문을 사용함으로써 코드를 간결하고 빠르게 작성 가능

– 예시) 10000명의 학생의 성적을 입력 받으시오.

15

…scanf(%d, studen1);scanf(%d, studen2);…

scanf(%d, studen9999);scanf(%d, studen10000);

10000번의반복

Page 16: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

16

반복문

• 반복문의 종류

반복문의 종류 구문 특징

while

while(조건 검사){

while문 몸체;}

구문이 간단하다.조건 지정을 잘못하면 무한반복할 위험이 높다.

do while

do{

do while문 몸체;} while(조건 검사);

몸체 행동을 최소 한번은 실행한다.구문이 간단하다.

for

for (초기화;조건 검사;증감 연산){

for문 몸체;}

일정한 반복 횟수를 이용하는 반복문에 적합하다.

Page 17: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

while 문

• while 문

– while 문의 기본원리는 특정 조건을 주고 그 조건이 만족될 때까지 계속해서 반복을 하는 것

• while 문의 구문

17

while (반복 조건){

반복 내용;}

“반복 조건”이 만족되는 동안“반복 내용”을 반복 실행함.

k = 0;while (k < 3){

printf(“ESSLab\n”);k++;

}

“k < 3”이 만족 되는 동안“printf()”와 “k++”을반복 실행함.

“반복 내용”이 한 문장인경우 중괄호는 생략 가능하다.

Page 18: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

while 문

• 증감연산의 필요성

– 반복문의 조건이 무너질 수 있는 상황을 만들기 위해서 필요하다.

– 증감 연산이 없을 경우 반복내용을 무한히 반복하는 상황이 나오게 된다.

18

k = 0;while (k < 3){

printf(“EssLab\n”);k++;

} 증가 연산.

Page 19: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

while 문의 이해 1

19

while (k < 3){

printf(“EssLab\n”);k++;

}

k = 0;

[단계2] 0 < 3 은 True. 반복조건이 만족 된다.

[단계3] 루프 내의 문장들을 실행. EssLab\n을화면에 출력. k값 1 증가. (현재 k값은 1)

[단계1] 변수 k를 0으로 초기화

[단계4] 루프 끝에서 다시 올라간다.

• while문 예제

Page 20: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

while 문의 이해 2

20

while (k < 3){

printf(“EssLab\n”);k++;

}

[단계5] 1 < 3 은 True. 반복 조건이 만족됨.

[단계6] 루프 내의 문장들을 실행. EssLab\n을 화면에 출력. k값 1 증가. (현재 k값은 2)

[단계7] 루프 끝에서다시 올라간다.

while (k < 3){

printf(“EssLab\n”);k++;

}

[단계8] 2 < 3 은 True. 반복조건이 만족됨.

[단계9] 루프 내의 문장들을 실행. EssLab\n을 화면에 출력. k값 1 증가. (현재 k값은 3)

[단계10] 루프 끝에서 다시 올라간다.

Page 21: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

while 문의 이해 3

21

while (k < 3){

printf(“EssLab\n”);k++;

}

return 0;

[단계12] while 문 탈출.

[단계11] 3 < 3 은 False. 반복조건을 만족하지 않음.

[단계13] main 함수 끝내기.

Page 22: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

do ~ while 문

• do ~ while 문

– while과 기본 원리가 같다.

– while과는 다르게 반복 조건의 검사를 뒤에서 하기 때문에 do ~ while문은 반복내용을 반드시 한번은 실행하게 되어 있다.

• do ~ while 문의 구문

22

do{

반복내용;} while (반복조건);

“반복 조건”이 만족되는 동안“반복 내용”을 반복 실행함.

do{

printf(“Hello World!\n”);k++;

} while (k < 3);

“printf()”와 “k++”을 한번 실행 후“k < 3”이 만족 되는 동안

“printf()”와 “k++”을 반복 실행함.

일단 한번은 실행한 후.

Page 23: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

do ~ while 문 과 while 문의 차이

• While 문과 do ~ while 문의 차이

23

k = 3;while (k < 3){

printf(“ESSLab\n”);k++;

}

k = 3;do{

printf(“ESSLab\n”);k++;

} while (k < 3);

[While 문 예제]에서는 while 안의 함수가 실행 되지 않는다.[do ~ while문 예제]에서는 do ~ while 안의 함수가 실행 된다.

Page 24: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

for 문

• for 문

– 가장 많이 사용되는 반복문.

• for 문의 구문

– 초기화, 조건 검사, 증감 연산 3개의 문장을 기본적으로 포함하고 있다.

24

for (초기화 ; 조건검사 ; 증감 연산){

반복내용;}

Page 25: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

for 문

• while문과 for문 비교

– while은 조건문은 포함하였지만 초기문은 while 문 전에 증감문은 while 문 반복내용에 포함하고 있다.

25

int k=0;while (k<3){

printf(“EssLab\n”);k++;

}

int k;for (k=0 ; k<3 ; k++){

printf(“EssLab\n”);}

증감 연산

조건 검사

초기화

Page 26: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

• for 문 예제

for 문의 이해 1

26

#include <stdio.h>

int main(void){

int k;for (k=0 ; k<3 ; k++){

printf(“EssLab\n”);}return 0;

}

Page 27: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

for 문의 이해 2

27

int k;[단계1] 변수 k를 선언.

for (k=0 ; k<3 ; k++){

printf(“EssLab\n”);}

[단계2] k의 값을 0으로 초기화.

[단계3] 조건 비교. (현재k 값은 0)

[단계5] 루프 끝에서 다시 올라감.

[단계4] 조건이 만족하므로 EssLab\n을화면에 출력.

[단계6] k의 값을 1증가.

Page 28: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

for 문의 이해 3

28

for (k=0 ; k<3 ; k++){

printf(“EssLab\n”);}

[단계7] 조건 비교. (현재k 값은 1)

[단계9] 루프 끝에서 다시 올라감.

[단계8] 조건이 만족하므로 EssLab\n을화면에 출력.

[단계10] k의 값을 1증가.

for (k=0 ; k<3 ; k++){

printf(“EssLab\n”);}

[단계11] 조건 비교. (현재k 값은 2)

[단계13] 루프 끝에서 다시 올라감.

[단계12] 조건이 만족하므로 EssLab\n을화면에 출력.

[단계14] k의 값을 1증가.

Page 29: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

for 문의 이해

29

return 0;[단계17] main 함수 끝내기.

for (k=0 ; k<3 ; k++){

printf(“EssLab\n”);}

[단계15] 조건 비교. (현재k 값은 3)

[단계16] 조건이만족하지 않으므로for문 빠져 나옴.

Page 30: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

무한 루프

• 무한 루프

– 항상 반복 조건을 만족시켜서 반복문을 빠져 나오지 못하게 될 때 무한루프에 빠졌다고 한다.

– 프로그램을 구현 하다 보면 무한 루프가 필요한 경우도 생기지만 원치 않는 무한루프는 피해야 한다.

– 의도적인 무한 루프 이외에는 반복의 조건이 어느 시점에서 무너질 수 있도록 반복문을 적절히 구성해야 한다.

30

int k = 1;while (k < 10){

printf(“new\n”);}

while (1){

printf(“new\n”);}

while문 몸체에 k에 대한 증감연산이 없어서 반복 조건을 항상 만족하게 된다.

1은 True 즉 항상 참이므로 반복조건을 항상 만족하게 된다.

for( ; ; ){

printf(“new\n”);}

for문으로 의도적인 무한루프를 만들 때 초기화, 조건검사, 증감 연산 모두 빈칸으로 두기도 한다.

Page 31: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

break 문

• break

– 반복문에서 조건과는 상관없이 반복문을 빠져 나갈 때 사용된다.

– 반복문이 여러 개 일 경우 종료되지 않은 가장 최근 반복문을 빠져나가게 된다.

31

int k =0;while (1){

printf(“EssLab\n”);if (k>9)

break;k++;

}k가 9 초과이면

반복문을 빠져나온다.

while (…){

…break;…for( … ; … ; … ){

…break;…

}…break;…

}

for문을 빠져나옴.

while문을 빠져나옴.

while문을 빠져나옴.

Page 32: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

continue 문

• continue

– 반복문에서 돌던 루프의 남아있는 부분을 건너 뛸 때 사용된다.

32

int k =0;while ( k<3 ){

k++;if (k%2 == 0)

continue;printf(“%d\n”,k);

}

k가 짝수이면 다음루프로 건너 뛴다.아래의 printf 문은실행되지 않는다.

Page 33: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

3333

버블정렬 (Bubble Sort)

• 인접한 2개의 레코드를 비교하여 순서대로 되어 있지않으면 서로 교환

• 이러한 비교-교환 과정을 리스트의 왼쪽 끝에서 오른쪽 끝까지 반복(스캔)

5 3 8 1 2 7

3 5 8 1 2 7

3 5 8 1 3 7

3 5 1 8 3 7

3 5 1 2 8 7

3 5 1 2 7 8

5와 3을 교환

교환 없음

8과 1을 교환

8과 2를 교환

8과 7을 교환

하나의 스캔 완료

5 3 8 1 2 7 초기 상태

3 5 1 2 7 8

3 1 2 5 7 8

1 2 3 5 7 8

1 2 3 5 7 8

1 2 3 5 7 8

1 2 3 5 7 8

스캔 1

스캔 2

스캔 3

스캔 4

스캔 5

정렬 완료

5 3 8 1 2 7 초기 상태

Page 34: 조건문과반복문 - esslab.hanyang.ac.kresslab.hanyang.ac.kr/uploads/data_structure_2019_1/lecture_note... · 버블정렬(Bubble Sort) •인접한2개의레코드를비교하여순서대로되어있지않으면서로교환

3434

버블정렬 알고리즘

#define SWAP(x, y, t) ( (t)=(x), (x)=(y), (y)=(t) )

void bubble_sort(int list[], int n)

{ int i, j, temp;

for( i = n-1; i > 0; i-- )

for( j = 0; j < i; j++ )

if( list[j] > list[j+1] )

SWAP(list[j], list[j+1], temp);

}

What to do for i

How to do for k → k+1